diff --git a/.doxygen b/.doxygen
index fb8ae5f045..d557f6ba85 100644
--- a/.doxygen
+++ b/.doxygen
@@ -48,7 +48,7 @@ PROJECT_NAME = OrcaSlicer
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.6.3
+PROJECT_NUMBER = latest
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -68,7 +68,7 @@ PROJECT_LOGO = ./resources/images/OrcaSlicer_32px.png
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
-OUTPUT_DIRECTORY = ../
+OUTPUT_DIRECTORY = .
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
@@ -1059,7 +1059,11 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS = */deps/*
+EXCLUDE_PATTERNS = */build/*
+EXCLUDE_PATTERNS = */deps_src/*
+
+
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -1286,7 +1290,7 @@ GENERATE_HTML = YES
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
-HTML_OUTPUT = OrcaSlicer_Dev_Document
+HTML_OUTPUT = internal_docs
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
@@ -1565,7 +1569,7 @@ TOC_EXPAND = NO
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.
-SITEMAP_URL =
+SITEMAP_URL = internals.orcaslicer.com
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml
index 2257133d40..41d489d4d8 100644
--- a/.github/workflows/build_all.yml
+++ b/.github/workflows/build_all.yml
@@ -93,7 +93,7 @@ jobs:
- name: Apt-Install Dependencies
uses: ./.github/actions/apt-install-deps
- name: Restore Test Artifact
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v7
with:
name: ${{ github.sha }}-tests
- uses: lukka/get-cmake@latest
@@ -105,7 +105,7 @@ jobs:
tar -xvf build_tests.tar
scripts/run_unit_tests.sh
- name: Upload Test Logs
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
if: ${{ failure() }}
with:
name: unit-test-logs
@@ -169,7 +169,7 @@ jobs:
arch: ${{ matrix.variant.arch }}
upload-artifact: false
- name: Upload artifacts Flatpak
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak'
diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml
index 00b5f71ecd..fee5a6e955 100644
--- a/.github/workflows/build_check_cache.yml
+++ b/.github/workflows/build_check_cache.yml
@@ -41,7 +41,7 @@ jobs:
- name: load cache
id: cache_deps
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ${{ steps.set_outputs.outputs.cache-path }}
key: ${{ steps.set_outputs.outputs.cache-key }}
diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml
index b255b6abf7..6cec66f24b 100644
--- a/.github/workflows/build_deps.yml
+++ b/.github/workflows/build_deps.yml
@@ -39,7 +39,7 @@ jobs:
lfs: 'true'
- name: load cached deps
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
@@ -105,14 +105,14 @@ jobs:
# Upload Artifacts
# - name: Upload Mac ${{ inputs.arch }} artifacts
# if: inputs.os == 'macos-14'
- # uses: actions/upload-artifact@v5
+ # uses: actions/upload-artifact@v6
# with:
# name: OrcaSlicer_dep_mac_${{ env.date }}
# path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.tar.gz
- name: Upload Windows artifacts
if: inputs.os == 'windows-latest'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_dep_win64_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep*.zip
@@ -121,7 +121,7 @@ jobs:
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_dep_ubuntu_${{ env.ubuntu-ver }}_${{ env.date }}
path: ${{ github.workspace }}/deps/build/OrcaSlicer_dep_ubuntu_*.tar.gz
diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml
index aef491f006..131766e49e 100644
--- a/.github/workflows/build_orca.yml
+++ b/.github/workflows/build_orca.yml
@@ -31,7 +31,7 @@ jobs:
lfs: 'true'
- name: load cached deps
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ${{ inputs.cache-path }}
key: ${{ inputs.cache-key }}
@@ -181,14 +181,14 @@ jobs:
- name: Upload artifacts mac
if: inputs.os == 'macos-14'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Mac_universal_${{ env.ver }}
path: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
- name: Upload OrcaSlicer_profile_validator DMG mac
if: inputs.os == 'macos-14'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Mac_universal_DMG_${{ env.ver }}
path: ${{ github.workspace }}/OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
@@ -255,28 +255,28 @@ jobs:
- name: Upload artifacts Win zip
if: inputs.os == 'windows-latest'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Windows_${{ env.ver }}_portable
path: ${{ github.workspace }}/build/OrcaSlicer
- name: Upload artifacts Win installer
if: inputs.os == 'windows-latest'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Windows_${{ env.ver }}
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
- name: Upload artifacts Win PDB
if: inputs.os == 'windows-latest'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: PDB
path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z
- name: Upload OrcaSlicer_profile_validator Win
if: inputs.os == 'windows-latest'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Windows_${{ env.ver }}
path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe
@@ -336,7 +336,7 @@ jobs:
# and doesn't preserve file permissions
- name: Upload Test Artifact
if: inputs.os == 'ubuntu-24.04'
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: ${{ github.sha }}-tests
overwrite: true
@@ -358,7 +358,7 @@ jobs:
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
ubuntu-ver-str: ${{ (inputs.os == 'ubuntu-24.04' && '_Ubuntu2404') || '' }}
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage'
@@ -367,7 +367,7 @@ jobs:
if: ${{ ! env.ACT && inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' }}
env:
ubuntu-ver: ${{ (inputs.os == 'ubuntu-20.04' && '2004') || (inputs.os == 'ubuntu-24.04' && '2404') || '' }}
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
path: './build/src/Release/OrcaSlicer_profile_validator'
diff --git a/.github/workflows/doxygen-docs.yml b/.github/workflows/doxygen-docs.yml
new file mode 100644
index 0000000000..f30c3e0d0e
--- /dev/null
+++ b/.github/workflows/doxygen-docs.yml
@@ -0,0 +1,78 @@
+name: Generate Doxygen Documentation
+
+on:
+ schedule:
+ - cron: '0 0 * * 1' # Every Monday at midnight UTC
+ workflow_dispatch: # Manual trigger
+
+concurrency:
+ group: ${{ github.workflow }}
+ cancel-in-progress: true
+
+jobs:
+ build-and-deploy:
+ name: Build and Deploy Docs
+ runs-on: ubuntu-latest
+ timeout-minutes: 60
+ # Only run on main branch of the main repository
+ if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main'
+ permissions:
+ contents: read
+ steps:
+ - uses: thejerrybao/setup-swap-space@v1
+ with:
+ swap-space-path: /swapfile
+ swap-size-gb: 8
+ remove-existing-swap-files: true
+
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
+ - name: Install Doxygen and Graphviz
+ run: |
+ set -euo pipefail
+ sudo apt-get update
+ sudo apt-get install -y doxygen graphviz
+
+ - name: Generate documentation
+ run: |
+ set -euo pipefail
+ # Override DOT_NUM_THREADS to avoid parallel dot race condition bug
+ sed -i 's/^DOT_NUM_THREADS.*/DOT_NUM_THREADS = 1/' .doxygen
+ doxygen .doxygen
+ # Verify documentation was generated
+ if [ ! -f "internal_docs/index.html" ]; then
+ echo "Error: Documentation generation failed - index.html not found"
+ exit 1
+ fi
+ - name: Install Rclone
+ run: |
+ set -euo pipefail
+ sudo -v
+ curl -fsSL https://rclone.org/install.sh | sudo bash
+
+ - name: optimize
+ run: |
+ set -euo pipefail
+ rm -f internal_docs/Nodes.xml internal_docs/Tokens.xml
+ find internal_docs -name "*.map" -type f -delete || true
+ find internal_docs -name "*.md5" -type f -delete || true
+
+ - name: upload
+ # We configure rclone dynamically using environment variables
+ run: |
+ set -euo pipefail
+ # Remove existing config if it exists to avoid conflicts
+ rclone config delete cloudflare 2>/dev/null || true
+ rclone config create cloudflare s3 \
+ provider Cloudflare \
+ access_key_id ${{ secrets.R2_ACCESS_KEY_ID }} \
+ secret_access_key ${{ secrets.R2_SECRET_ACCESS_KEY }} \
+ endpoint ${{ secrets.R2_ENDPOINT }}
+
+ rclone sync internal_docs/ cloudflare:orcaslicer-internals \
+ --progress \
+ --transfers 512 \
+ --checkers 512
+
+ echo "Documentation upload completed successfully"
\ No newline at end of file
diff --git a/.github/workflows/shellcheck.yml b/.github/workflows/shellcheck.yml
index 336636bbcc..d5fe5a35d2 100644
--- a/.github/workflows/shellcheck.yml
+++ b/.github/workflows/shellcheck.yml
@@ -21,7 +21,7 @@ jobs:
steps:
- name: Cache shellcheck download
id: cache-shellcheck-v0_11
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ~/shellcheck
key: ${{ runner.os }}-shellcheck-v0_11
diff --git a/.gitignore b/.gitignore
index 09abcc8dee..5b369a47fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,4 @@ deps_src/build/
test.js
/.cache/
.clangd
+internal_docs/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 162763621c..041c7b17cf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,7 @@
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0")
+ set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
+endif()
+
cmake_minimum_required(VERSION 3.13)
# Verify that your CMake version is exactly 3.5 series or higher on windows
@@ -571,6 +575,7 @@ endif()
if(POLICY CMP0167)
cmake_policy(SET CMP0167 NEW)
endif()
+set(Boost_NO_SYSTEM_PATHS TRUE)
find_package(Boost 1.83.0 REQUIRED COMPONENTS system filesystem thread log log_setup locale regex chrono atomic date_time iostreams program_options nowide)
add_library(boost_libs INTERFACE)
@@ -688,6 +693,10 @@ find_package(PNG REQUIRED)
set(OpenGL_GL_PREFERENCE "LEGACY")
find_package(OpenGL REQUIRED)
+if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set(OPENGL_LIBRARIES "-framework OpenGL" CACHE STRING "OpenGL framework" FORCE)
+endif()
+
set(GLEW_ROOT "${CMAKE_PREFIX_PATH}")
message("GLEW_ROOT: ${GLEW_ROOT}")
# Find glew or use bundled version
diff --git a/README.md b/README.md
index 59fb76034b..afd418ea0a 100644
--- a/README.md
+++ b/README.md
@@ -44,19 +44,19 @@ If you come across any of these in search results, please report them as
# Main features
-- **[Advanced Calibration Tools](https://github.com/OrcaSlicer/OrcaSlicer/wiki/Calibration)**
+- **[Advanced Calibration Tools](https://www.orcaslicer.com/wiki/Calibration)**
Comprehensive suite: temperature towers, flow rate, retraction & more for optimal performance.
-- **[Precise Wall](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_precision#precise-wall) and [Seam Control](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_seam)**
+- **[Precise Wall](https://www.orcaslicer.com/wiki/quality_settings_precision#precise-wall) and [Seam Control](https://www.orcaslicer.com/wiki/quality_settings_seam)**
Adjust outer wall spacing and apply scarf seams to enhance print accuracy.
-- **[Sandwich Mode](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_wall_and_surfaces#innerouterinner) and [Polyholes](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_precision#polyholes) Support**
- Use varied infill [patterns](https://github.com/OrcaSlicer/OrcaSlicer/wiki/strength_settings_patterns) and accurate hole shapes for improved clarity.
-- **[Overhang](https://github.com/OrcaSlicer/OrcaSlicer/wiki/quality_settings_overhangs) and [Support Optimization](https://github.com/OrcaSlicer/OrcaSlicer/wiki#support-settings)**
+- **[Sandwich Mode](https://www.orcaslicer.com/wiki/quality_settings_wall_and_surfaces#innerouterinner) and [Polyholes](https://www.orcaslicer.com/wiki/quality_settings_precision#polyholes) Support**
+ Use varied infill [patterns](https://www.orcaslicer.com/wiki/strength_settings_patterns) and accurate hole shapes for improved clarity.
+- **[Overhang](https://www.orcaslicer.com/wiki/quality_settings_overhangs) and [Support Optimization](https://www.orcaslicer.com/wiki#support-settings)**
Modify geometry for printable overhangs with precise support placement.
-- **[Granular Controls and Customization](https://github.com/OrcaSlicer/OrcaSlicer/wiki#process-settings)**
+- **[Granular Controls and Customization](https://www.orcaslicer.com/wiki#process-settings)**
Fine-tune print speed, layer height, pressure, and temperature with precision.
- **Network Printer Support**
Seamless integration with Klipper, PrusaLink, and OctoPrint for remote control.
-- **[Mouse Ear Brims](https://github.com/OrcaSlicer/OrcaSlicer/wiki/others_settings_brim) & [Adaptive Bed Mesh](https://github.com/OrcaSlicer/OrcaSlicer/wiki/printer_basic_information_adaptive_bed_mesh)**
+- **[Mouse Ear Brims](https://www.orcaslicer.com/wiki/others_settings_brim) & [Adaptive Bed Mesh](https://www.orcaslicer.com/wiki/printer_basic_information_adaptive_bed_mesh)**
Automatic brims and adaptive mesh calibration ensure consistent adhesion.
- **User-Friendly Interface**
Intuitive drag-and-drop design with pre-made profiles for popular printers.
@@ -68,10 +68,10 @@ If you come across any of these in search results, please report them as
# Wiki
-The [wiki](https://github.com/OrcaSlicer/OrcaSlicer/wiki) aims to provide a detailed explanation of the slicer settings, including how to maximize their use and how to calibrate and set up your printer.
+The [wiki](https://www.orcaslicer.com/wiki) aims to provide a detailed explanation of the slicer settings, including how to maximize their use and how to calibrate and set up your printer.
-- **[Access the wiki here](https://github.com/OrcaSlicer/OrcaSlicer/wiki)**
-- **[Contribute to the wiki](https://github.com/OrcaSlicer/OrcaSlicer/wiki/How-to-wiki)**
+- **[Access the wiki here](https://www.orcaslicer.com/wiki)**
+- **[Contribute to the wiki](https://www.orcaslicer.com/wiki/How-to-wiki)**
# Download
@@ -144,7 +144,7 @@ winget install --id=SoftFever.OrcaSlicer -e
# How to Compile
-All updated build instructions for Windows, macOS, and Linux are now available on the official [OrcaSlicer Wiki - How to build](https://github.com/OrcaSlicer/OrcaSlicer/wiki/How-to-build) page.
+All updated build instructions for Windows, macOS, and Linux are now available on the official [OrcaSlicer Wiki - How to build](https://www.orcaslicer.com/wiki/How-to-build) page.
Please refer to the wiki to ensure you're following the latest and most accurate steps for your platform.
diff --git a/build_release_macos.sh b/build_release_macos.sh
index e42490f1bd..1999c62b92 100755
--- a/build_release_macos.sh
+++ b/build_release_macos.sh
@@ -3,7 +3,7 @@
set -e
set -o pipefail
-while getopts ":dpa:snt:xbc:1h" opt; do
+while getopts ":dpa:snt:xbc:1Th" opt; do
case "${opt}" in
d )
export BUILD_TARGET="deps"
@@ -37,6 +37,9 @@ while getopts ":dpa:snt:xbc:1h" opt; do
1 )
export CMAKE_BUILD_PARALLEL_LEVEL=1
;;
+ T )
+ export BUILD_TESTS="1"
+ ;;
h ) echo "Usage: ./build_release_macos.sh [-d]"
echo " -d: Build deps only"
echo " -a: Set ARCHITECTURE (arm64 or x86_64 or universal)"
@@ -47,6 +50,7 @@ while getopts ":dpa:snt:xbc:1h" opt; do
echo " -b: Build without reconfiguring CMake"
echo " -c: Set CMake build configuration, default is Release"
echo " -1: Use single job for building"
+ echo " -T: Build and run tests"
exit 0
;;
* )
@@ -85,6 +89,15 @@ if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then
export OSX_DEPLOYMENT_TARGET="11.3"
fi
+CMAKE_VERSION=$(cmake --version | head -1 | sed 's/[^0-9]*\([0-9]*\).*/\1/')
+if [ "$CMAKE_VERSION" -ge 4 ] 2>/dev/null; then
+ export CMAKE_POLICY_VERSION_MINIMUM=3.5
+ export CMAKE_POLICY_COMPAT="-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
+ echo "Detected CMake 4.x, adding compatibility flag (env + cmake arg)"
+else
+ export CMAKE_POLICY_COMPAT=""
+fi
+
echo "Build params:"
echo " - ARCH: $ARCH"
echo " - BUILD_CONFIG: $BUILD_CONFIG"
@@ -133,7 +146,8 @@ function build_deps() {
-G "${DEPS_CMAKE_GENERATOR}" \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_OSX_ARCHITECTURES:STRING="${_ARCH}" \
- -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
+ -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
+ ${CMAKE_POLICY_COMPAT}
fi
cmake --build . --config "$BUILD_CONFIG" --target deps
)
@@ -170,13 +184,24 @@ function build_slicer() {
-G "${SLICER_CMAKE_GENERATOR}" \
-DORCA_TOOLS=ON \
${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \
+ ${BUILD_TESTS:+-DBUILD_TESTS=ON} \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_OSX_ARCHITECTURES="${_ARCH}" \
- -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
+ -DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}" \
+ ${CMAKE_POLICY_COMPAT}
fi
cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET"
)
+ if [ "1." == "$BUILD_TESTS". ]; then
+ echo "Running tests for $_ARCH..."
+ (
+ set -x
+ cd "$PROJECT_BUILD_DIR"
+ ctest --build-config "$BUILD_CONFIG" --output-on-failure
+ )
+ fi
+
echo "Verify localization with gettext..."
(
cd "$PROJECT_DIR"
diff --git a/cmake/modules/FindGLEW.cmake b/cmake/modules/FindGLEW.cmake
index 56661ffd33..5dd7b24df1 100644
--- a/cmake/modules/FindGLEW.cmake
+++ b/cmake/modules/FindGLEW.cmake
@@ -223,8 +223,13 @@ if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS)
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
if(APPLE)
- set_target_properties(GLEW::glew
- PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set_target_properties(GLEW::glew
+ PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
+ else()
+ set_target_properties(GLEW::glew
+ PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ endif()
endif()
if(GLEW_SHARED_LIBRARY_RELEASE)
@@ -258,8 +263,13 @@ elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS)
set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_COMPILE_DEFINITIONS GLEW_STATIC)
if(APPLE)
- set_target_properties(GLEW::glew_s
- PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set_target_properties(GLEW::glew_s
+ PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
+ else()
+ set_target_properties(GLEW::glew_s
+ PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ endif()
endif()
if(GLEW_STATIC_LIBRARY_RELEASE)
@@ -292,8 +302,13 @@ if(NOT TARGET GLEW::GLEW)
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}")
if(APPLE)
- set_target_properties(GLEW::GLEW
- PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set_target_properties(GLEW::GLEW
+ PROPERTIES INTERFACE_LINK_LIBRARIES "-framework OpenGL")
+ else()
+ set_target_properties(GLEW::GLEW
+ PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL)
+ endif()
endif()
if(TARGET GLEW::glew)
diff --git a/deps/CGAL/0001-clang19.patch b/deps/CGAL/0001-clang19.patch
deleted file mode 100644
index 92a0293735..0000000000
--- a/deps/CGAL/0001-clang19.patch
+++ /dev/null
@@ -1,59 +0,0 @@
---- a/BGL/include/CGAL/boost/graph/iterator.h 2022-10-07 19:04:41 UTC
-+++ b/BGL/include/CGAL/boost/graph/iterator.h
-@@ -213,18 +213,7 @@ class Halfedge_around_source_iterator { (public)
- {}
-
- #ifndef DOXYGEN_RUNNING
-- // design patter: "safe bool"
-- // will be replaced by explicit operator bool with C++11
-- typedef void (Halfedge_around_source_iterator::*bool_type)() const;
-
-- void this_type_does_not_support_comparisons() const {}
--
-- operator bool_type() const
-- {
-- return (! (this->base() == nullptr)) ?
-- &Halfedge_around_source_iterator::this_type_does_not_support_comparisons : 0;
-- }
--
- bool operator==( const Self& i) const {
- CGAL_assertion( anchor == anchor);
- return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
-@@ -313,18 +302,7 @@ class Halfedge_around_target_iterator { (public)
- {}
-
- #ifndef DOXYGEN_RUNNING
-- // design patter: "safe bool"
-- // will be replaced by explicit operator bool with C++11
-- typedef void (Halfedge_around_target_iterator::*bool_type)() const;
-
-- void this_type_does_not_support_comparisons() const {}
--
-- operator bool_type() const
-- {
-- return (! (this->base() == nullptr)) ?
-- &Halfedge_around_target_iterator::this_type_does_not_support_comparisons : 0;
-- }
--
- bool operator==( const Self& i) const {
- CGAL_assertion( anchor == anchor);
- return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
-@@ -411,18 +389,6 @@ class Halfedge_around_face_iterator { (public)
- const value_type& operator * ( ) const { return pos; }
- pointer operator -> ( ) { return &pos; }
- const value_type* operator -> ( ) const { return &pos; }
--
-- // design patter: "safe bool"
-- // will be replaced by explicit operator bool with C++11
-- typedef void (Halfedge_around_face_iterator::*bool_type)() const;
--
-- void this_type_does_not_support_comparisons() const {}
--
-- operator bool_type() const
-- {
-- return (! (this->base() == nullptr)) ?
-- &Halfedge_around_face_iterator::this_type_does_not_support_comparisons : 0;
-- }
-
- bool operator==( const Self& i) const {
- CGAL_assertion( anchor == anchor);
diff --git a/deps/CGAL/CGAL.cmake b/deps/CGAL/CGAL.cmake
index 73eee6701b..ec77e0ebae 100644
--- a/deps/CGAL/CGAL.cmake
+++ b/deps/CGAL/CGAL.cmake
@@ -5,11 +5,10 @@ endif ()
orcaslicer_add_cmake_project(
CGAL
# GIT_REPOSITORY https://github.com/CGAL/cgal.git
- # GIT_TAG bec70a6d52d8aacb0b3d82a7b4edc3caa899184b # releases/CGAL-5.0
+ # GIT_TAG 3654f780ae0c64675cabaef0e5ddaf904c48b4b7 # releases/CGAL-5.6.3
# For whatever reason, this keeps downloading forever (repeats downloads if finished)
- URL https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip
- URL_HASH SHA256=d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0
- PATCH_COMMAND git apply ${CGAL_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-clang19.patch
+ URL https://github.com/CGAL/cgal/releases/download/v5.6.3/CGAL-5.6.3.zip
+ URL_HASH SHA256=5d577acb4a9918ccb960491482da7a3838f8d363aff47e14d703f19fd84733d4
DEPENDS dep_Boost dep_GMP dep_MPFR
)
diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
index 13f3945d0c..92e36d0cad 100644
--- a/deps/CMakeLists.txt
+++ b/deps/CMakeLists.txt
@@ -1,3 +1,7 @@
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0")
+ set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
+endif()
+
#
# This CMake project downloads, configures and builds OrcaSlicer dependencies on Unix and Windows.
#
@@ -177,6 +181,7 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_gen}
CMAKE_ARGS
+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
@@ -221,6 +226,7 @@ else()
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
${_gen}
CMAKE_ARGS
+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
-DBUILD_SHARED_LIBS:BOOL=OFF
diff --git a/deps/Qhull/Qhull.cmake b/deps/Qhull/Qhull.cmake
index 9376700428..97667021c0 100644
--- a/deps/Qhull/Qhull.cmake
+++ b/deps/Qhull/Qhull.cmake
@@ -1,11 +1,11 @@
include(GNUInstallDirs)
orcaslicer_add_cmake_project(Qhull
- URL "https://github.com/qhull/qhull/archive/v8.0.1.zip"
- URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b
+ URL "https://github.com/qhull/qhull/archive/v8.0.2.zip"
+ URL_HASH SHA256=a378e9a39e718e289102c20d45632f873bfdc58a7a5f924246ea4b176e185f1e
CMAKE_ARGS
-DINCLUDE_INSTALL_DIR=${CMAKE_INSTALL_INCLUDEDIR}
)
if (MSVC)
add_debug_dep(dep_Qhull)
-endif ()
\ No newline at end of file
+endif ()
diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake
index e45979fb42..3a52d14198 100644
--- a/deps/wxWidgets/wxWidgets.cmake
+++ b/deps/wxWidgets/wxWidgets.cmake
@@ -24,6 +24,14 @@ else ()
set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF")
endif ()
+set(_wx_opengl_override "")
+if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set(_wx_opengl_override
+ -DOPENGL_gl_LIBRARY="-framework OpenGL"
+ -DOPENGL_glu_LIBRARY="-framework OpenGL"
+ )
+endif()
+
orcaslicer_add_cmake_project(
wxWidgets
GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets"
@@ -31,6 +39,7 @@ orcaslicer_add_cmake_project(
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG}
${_wx_flatpak_patch}
CMAKE_ARGS
+ ${_wx_opengl_override}
-DwxBUILD_PRECOMP=ON
${_wx_toolkit}
"-DCMAKE_DEBUG_POSTFIX:STRING=${_wx_debug_postfix}"
diff --git a/deps_src/CMakeLists.txt b/deps_src/CMakeLists.txt
index 5c4e62b99f..390cffad30 100644
--- a/deps_src/CMakeLists.txt
+++ b/deps_src/CMakeLists.txt
@@ -10,13 +10,13 @@ add_subdirectory(earcut)
add_subdirectory(fast_float)
add_subdirectory(nanosvg)
add_subdirectory(nlohmann)
-add_subdirectory(spline) # Header-only spline library
add_subdirectory(stb_dxt) # Header-only STB DXT compression library
# Static libraries
add_subdirectory(Shiny)
add_subdirectory(admesh)
add_subdirectory(clipper)
+add_subdirectory(clipper2)
add_subdirectory(expat)
add_subdirectory(glu-libtess)
add_subdirectory(hidapi)
diff --git a/deps_src/README_CMAKE_INTERFACES.md b/deps_src/README_CMAKE_INTERFACES.md
index 78a806fc0b..6ab88c63af 100644
--- a/deps_src/README_CMAKE_INTERFACES.md
+++ b/deps_src/README_CMAKE_INTERFACES.md
@@ -24,18 +24,7 @@ target_link_libraries(your_target PRIVATE semver::semver)
target_link_libraries(your_target PRIVATE hints)
```
-### 3. **spline** (Interface Library)
-- **Type**: Interface library (header-only)
-- **Target**: `spline` or `spline::spline`
-- **Headers**: `spline.h`
-- **Usage**:
-```cmake
-target_link_libraries(your_target PRIVATE spline)
-# or
-target_link_libraries(your_target PRIVATE spline::spline)
-```
-
-### 4. **stb_dxt** (Interface Library)
+### 3. **stb_dxt** (Interface Library)
- **Type**: Interface library (header-only)
- **Target**: `stb_dxt` or `stb_dxt::stb_dxt`
- **Headers**: `stb_dxt.h`
@@ -53,10 +42,9 @@ target_link_libraries(your_target PRIVATE stb_dxt::stb_dxt)
1. **In your CMakeLists.txt**, simply link the library:
```cmake
add_executable(my_app main.cpp)
-target_link_libraries(my_app
- PRIVATE
+target_link_libraries(my_app
+ PRIVATE
semver::semver # For version parsing
- spline::spline # For spline interpolation
stb_dxt::stb_dxt # For DXT texture compression
hints # For hints functionality
)
@@ -67,9 +55,6 @@ target_link_libraries(my_app
// For semver
#include
-// For spline
-#include
-
// For stb_dxt
#include
@@ -100,7 +85,6 @@ target_link_libraries(mycomponent
PUBLIC
semver::semver # Version handling is part of public API
PRIVATE
- spline::spline # Used internally for interpolation
stb_dxt::stb_dxt # Used internally for texture compression
)
diff --git a/src/clipper2/CMakeLists.txt b/deps_src/clipper2/CMakeLists.txt
similarity index 100%
rename from src/clipper2/CMakeLists.txt
rename to deps_src/clipper2/CMakeLists.txt
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.core.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.core.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.core.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.core.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.engine.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.engine.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.engine.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.engine.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.export.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.export.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.export.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.export.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.minkowski.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.minkowski.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.minkowski.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.minkowski.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.offset.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.offset.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.offset.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.offset.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.rectclip.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.rectclip.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.rectclip.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.rectclip.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper.version.h b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.version.h
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper.version.h
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper.version.h
diff --git a/src/clipper2/Clipper2Lib/include/clipper2/clipper2_z.hpp b/deps_src/clipper2/Clipper2Lib/include/clipper2/clipper2_z.hpp
similarity index 100%
rename from src/clipper2/Clipper2Lib/include/clipper2/clipper2_z.hpp
rename to deps_src/clipper2/Clipper2Lib/include/clipper2/clipper2_z.hpp
diff --git a/src/clipper2/Clipper2Lib/src/clipper.engine.cpp b/deps_src/clipper2/Clipper2Lib/src/clipper.engine.cpp
similarity index 100%
rename from src/clipper2/Clipper2Lib/src/clipper.engine.cpp
rename to deps_src/clipper2/Clipper2Lib/src/clipper.engine.cpp
diff --git a/src/clipper2/Clipper2Lib/src/clipper.offset.cpp b/deps_src/clipper2/Clipper2Lib/src/clipper.offset.cpp
similarity index 100%
rename from src/clipper2/Clipper2Lib/src/clipper.offset.cpp
rename to deps_src/clipper2/Clipper2Lib/src/clipper.offset.cpp
diff --git a/src/clipper2/Clipper2Lib/src/clipper.rectclip.cpp b/deps_src/clipper2/Clipper2Lib/src/clipper.rectclip.cpp
similarity index 100%
rename from src/clipper2/Clipper2Lib/src/clipper.rectclip.cpp
rename to deps_src/clipper2/Clipper2Lib/src/clipper.rectclip.cpp
diff --git a/src/clipper2/Clipper2Lib/src/clipper2_z.cpp b/deps_src/clipper2/Clipper2Lib/src/clipper2_z.cpp
similarity index 100%
rename from src/clipper2/Clipper2Lib/src/clipper2_z.cpp
rename to deps_src/clipper2/Clipper2Lib/src/clipper2_z.cpp
diff --git a/deps_src/spline/CMakeLists.txt b/deps_src/spline/CMakeLists.txt
deleted file mode 100644
index ee6d5c9cb3..0000000000
--- a/deps_src/spline/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-cmake_minimum_required(VERSION 3.13)
-project(spline)
-
-# Create interface library for spline (header-only library)
-add_library(spline INTERFACE)
-
-# Set include directories for the interface library
-target_include_directories(spline SYSTEM
- INTERFACE
- $
- $
-)
-
-# Add compile features
-target_compile_features(spline INTERFACE cxx_std_11)
-
-# Create an alias for consistent naming
-add_library(spline::spline ALIAS spline)
-
-# Install headers if needed
-install(FILES
- spline.h
- DESTINATION include/spline
-)
-
-# Install the interface library
-install(TARGETS spline
- EXPORT splineTargets
- INCLUDES DESTINATION include
-)
-
-# Export the targets
-install(EXPORT splineTargets
- FILE splineTargets.cmake
- NAMESPACE spline::
- DESTINATION lib/cmake/spline
-)
diff --git a/deps_src/spline/spline.h b/deps_src/spline/spline.h
deleted file mode 100644
index 4b1ddd6134..0000000000
--- a/deps_src/spline/spline.h
+++ /dev/null
@@ -1,944 +0,0 @@
-/*
- * spline.h
- *
- * simple cubic spline interpolation library without external
- * dependencies
- *
- * ---------------------------------------------------------------------
- * Copyright (C) 2011, 2014, 2016, 2021 Tino Kluge (ttk448 at gmail.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- * ---------------------------------------------------------------------
- *
- */
-
-
-#ifndef TK_SPLINE_H
-#define TK_SPLINE_H
-
-#include
-#include
-#include
-#include
-#include
-#ifdef HAVE_SSTREAM
-#include
-#include
-#endif // HAVE_SSTREAM
-
-// not ideal but disable unused-function warnings
-// (we get them because we have implementations in the header file,
-// and this is because we want to be able to quickly separate them
-// into a cpp file if necessary)
-#if !defined(_MSC_VER)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-#endif
-
-namespace tk
-{
-
-// spline interpolation
-class spline
-{
-public:
- // spline types
- enum spline_type {
- linear = 10, // linear interpolation
- cspline = 30, // cubic splines (classical C^2)
- cspline_hermite = 31 // cubic hermite splines (local, only C^1)
- };
-
- // boundary condition type for the spline end-points
- enum bd_type {
- first_deriv = 1,
- second_deriv = 2,
- not_a_knot = 3
- };
-
-protected:
- std::vector m_x,m_y; // x,y coordinates of points
- // interpolation parameters
- // f(x) = a_i + b_i*(x-x_i) + c_i*(x-x_i)^2 + d_i*(x-x_i)^3
- // where a_i = y_i, or else it won't go through grid points
- std::vector m_b,m_c,m_d; // spline coefficients
- double m_c0; // for left extrapolation
- spline_type m_type;
- bd_type m_left, m_right;
- double m_left_value, m_right_value;
- bool m_made_monotonic;
- void set_coeffs_from_b(); // calculate c_i, d_i from b_i
- size_t find_closest(double x) const; // closest idx so that m_x[idx]<=x
-
-public:
- // default constructor: set boundary condition to be zero curvature
- // at both ends, i.e. natural splines
- spline(): m_type(cspline),
- m_left(second_deriv), m_right(second_deriv),
- m_left_value(0.0), m_right_value(0.0), m_made_monotonic(false)
- {
- ;
- }
- spline(const std::vector& X, const std::vector& Y,
- spline_type type = cspline,
- bool make_monotonic = false,
- bd_type left = second_deriv, double left_value = 0.0,
- bd_type right = second_deriv, double right_value = 0.0
- ):
- m_type(type),
- m_left(left), m_right(right),
- m_left_value(left_value), m_right_value(right_value),
- m_made_monotonic(false) // false correct here: make_monotonic() sets it
- {
- this->set_points(X,Y,m_type);
- if(make_monotonic) {
- this->make_monotonic();
- }
- }
-
-
- // modify boundary conditions: if called it must be before set_points()
- void set_boundary(bd_type left, double left_value,
- bd_type right, double right_value);
-
- // set all data points (cubic_spline=false means linear interpolation)
- void set_points(const std::vector& x,
- const std::vector& y,
- spline_type type=cspline);
-
- // adjust coefficients so that the spline becomes piecewise monotonic
- // where possible
- // this is done by adjusting slopes at grid points by a non-negative
- // factor and this will break C^2
- // this can also break boundary conditions if adjustments need to
- // be made at the boundary points
- // returns false if no adjustments have been made, true otherwise
- bool make_monotonic();
-
- // evaluates the spline at point x
- double operator() (double x) const;
- double deriv(int order, double x) const;
-
- // solves for all x so that: spline(x) = y
- std::vector solve(double y, bool ignore_extrapolation=true) const;
-
- // returns the input data points
- std::vector get_x() const { return m_x; }
- std::vector get_y() const { return m_y; }
- double get_x_min() const { assert(!m_x.empty()); return m_x.front(); }
- double get_x_max() const { assert(!m_x.empty()); return m_x.back(); }
-
-#ifdef HAVE_SSTREAM
- // spline info string, i.e. spline type, boundary conditions etc.
- std::string info() const;
-#endif // HAVE_SSTREAM
-
-};
-
-
-
-namespace internal
-{
-
-// band matrix solver
-class band_matrix
-{
-private:
- std::vector< std::vector > m_upper; // upper band
- std::vector< std::vector > m_lower; // lower band
-public:
- band_matrix() {}; // constructor
- band_matrix(int dim, int n_u, int n_l); // constructor
- ~band_matrix() {}; // destructor
- void resize(int dim, int n_u, int n_l); // init with dim,n_u,n_l
- int dim() const; // matrix dimension
- int num_upper() const
- {
- return (int)m_upper.size()-1;
- }
- int num_lower() const
- {
- return (int)m_lower.size()-1;
- }
- // access operator
- double & operator () (int i, int j); // write
- double operator () (int i, int j) const; // read
- // we can store an additional diagonal (in m_lower)
- double& saved_diag(int i);
- double saved_diag(int i) const;
- void lu_decompose();
- std::vector r_solve(const std::vector& b) const;
- std::vector l_solve(const std::vector& b) const;
- std::vector lu_solve(const std::vector& b,
- bool is_lu_decomposed=false);
-
-};
-
-double get_eps();
-
-std::vector solve_cubic(double a, double b, double c, double d,
- int newton_iter=0);
-
-} // namespace internal
-
-
-
-
-// ---------------------------------------------------------------------
-// implementation part, which could be separated into a cpp file
-// ---------------------------------------------------------------------
-
-// spline implementation
-// -----------------------
-
-void spline::set_boundary(spline::bd_type left, double left_value,
- spline::bd_type right, double right_value)
-{
- assert(m_x.size()==0); // set_points() must not have happened yet
- m_left=left;
- m_right=right;
- m_left_value=left_value;
- m_right_value=right_value;
-}
-
-
-void spline::set_coeffs_from_b()
-{
- assert(m_x.size()==m_y.size());
- assert(m_x.size()==m_b.size());
- assert(m_x.size()>2);
- size_t n=m_b.size();
- if(m_c.size()!=n)
- m_c.resize(n);
- if(m_d.size()!=n)
- m_d.resize(n);
-
- for(size_t i=0; i& x,
- const std::vector& y,
- spline_type type)
-{
- assert(x.size()==y.size());
- assert(x.size()>=3);
- // not-a-knot with 3 points has many solutions
- if(m_left==not_a_knot || m_right==not_a_knot)
- assert(x.size()>=4);
- m_type=type;
- m_made_monotonic=false;
- m_x=x;
- m_y=y;
- int n = (int) x.size();
- // check strict monotonicity of input vector x
- for(int i=0; i rhs(n);
- for(int i=1; i2);
- bool modified = false;
- const int n=(int)m_x.size();
- // make sure: input data monotonic increasing --> b_i>=0
- // input data monotonic decreasing --> b_i<=0
- for(int i=0; i=m_y[i]) && (m_y[i]>=m_y[ip1]) && m_b[i]>0.0) ) {
- modified=true;
- m_b[i]=0.0;
- }
- }
- // if input data is monotonic (b[i], b[i+1], avg have all the same sign)
- // ensure a sufficient criteria for monotonicity is satisfied:
- // sqrt(b[i]^2+b[i+1]^2) <= 3 |avg|, with avg=(y[i+1]-y[i])/h,
- for(int i=0; i=0.0 && m_b[i+1]>=0.0 && avg>0.0) ||
- (m_b[i]<=0.0 && m_b[i+1]<=0.0 && avg<0.0) ) {
- // input data is monotonic
- double r = sqrt(m_b[i]*m_b[i]+m_b[i+1]*m_b[i+1])/std::fabs(avg);
- if(r>3.0) {
- // sufficient criteria for monotonicity: r<=3
- // adjust b[i] and b[i+1]
- modified=true;
- m_b[i] *= (3.0/r);
- m_b[i+1] *= (3.0/r);
- }
- }
- }
-
- if(modified==true) {
- set_coeffs_from_b();
- m_made_monotonic=true;
- }
-
- return modified;
-}
-
-// return the closest idx so that m_x[idx] <= x (return 0 if x::const_iterator it;
- it=std::upper_bound(m_x.begin(),m_x.end(),x); // *it > x
- size_t idx = std::max( int(it-m_x.begin())-1, 0); // m_x[idx] <= x
- return idx;
-}
-
-double spline::operator() (double x) const
-{
- // polynomial evaluation using Horner's scheme
- // TODO: consider more numerically accurate algorithms, e.g.:
- // - Clenshaw
- // - Even-Odd method by A.C.R. Newbery
- // - Compensated Horner Scheme
- size_t n=m_x.size();
- size_t idx=find_closest(x);
-
- double h=x-m_x[idx];
- double interpol;
- if(xm_x[n-1]) {
- // extrapolation to the right
- interpol=(m_c[n-1]*h + m_b[n-1])*h + m_y[n-1];
- } else {
- // interpolation
- interpol=((m_d[idx]*h + m_c[idx])*h + m_b[idx])*h + m_y[idx];
- }
- return interpol;
-}
-
-double spline::deriv(int order, double x) const
-{
- assert(order>0);
- size_t n=m_x.size();
- size_t idx = find_closest(x);
-
- double h=x-m_x[idx];
- double interpol;
- if(xm_x[n-1]) {
- // extrapolation to the right
- switch(order) {
- case 1:
- interpol=2.0*m_c[n-1]*h + m_b[n-1];
- break;
- case 2:
- interpol=2.0*m_c[n-1];
- break;
- default:
- interpol=0.0;
- break;
- }
- } else {
- // interpolation
- switch(order) {
- case 1:
- interpol=(3.0*m_d[idx]*h + 2.0*m_c[idx])*h + m_b[idx];
- break;
- case 2:
- interpol=6.0*m_d[idx]*h + 2.0*m_c[idx];
- break;
- case 3:
- interpol=6.0*m_d[idx];
- break;
- default:
- interpol=0.0;
- break;
- }
- }
- return interpol;
-}
-
-std::vector spline::solve(double y, bool ignore_extrapolation) const
-{
- std::vector x; // roots for the entire spline
- std::vector root; // roots for each piecewise cubic
- const size_t n=m_x.size();
-
- // left extrapolation
- if(ignore_extrapolation==false) {
- root = internal::solve_cubic(m_y[0]-y,m_b[0],m_c0,0.0,1);
- for(size_t j=0; j0) ? (m_x[i]-m_x[i-1]) : 0.0;
- double eps = internal::get_eps()*512.0*std::min(h,1.0);
- if( (-eps<=root[j]) && (root[j]0 && x.back()+eps > new_root) {
- x.back()=new_root; // avoid spurious duplicate roots
- } else {
- x.push_back(new_root);
- }
- }
- }
- }
-
- // right extrapolation
- if(ignore_extrapolation==false) {
- root = internal::solve_cubic(m_y[n-1]-y,m_b[n-1],m_c[n-1],0.0,1);
- for(size_t j=0; j0);
- assert(n_u>=0);
- assert(n_l>=0);
- m_upper.resize(n_u+1);
- m_lower.resize(n_l+1);
- for(size_t i=0; i0) {
- return (int)m_upper[0].size();
- } else {
- return 0;
- }
-}
-
-
-// defines the new operator (), so that we can access the elements
-// by A(i,j), index going from i=0,...,dim()-1
-double & band_matrix::operator () (int i, int j)
-{
- int k=j-i; // what band is the entry
- assert( (i>=0) && (i=0) && (j diagonal, k<0 lower left part, k>0 upper right part
- if(k>=0) return m_upper[k][i];
- else return m_lower[-k][i];
-}
-double band_matrix::operator () (int i, int j) const
-{
- int k=j-i; // what band is the entry
- assert( (i>=0) && (i=0) && (j diagonal, k<0 lower left part, k>0 upper right part
- if(k>=0) return m_upper[k][i];
- else return m_lower[-k][i];
-}
-// second diag (used in LU decomposition), saved in m_lower
-double band_matrix::saved_diag(int i) const
-{
- assert( (i>=0) && (i=0) && (idim(); i++) {
- assert(this->operator()(i,i)!=0.0);
- this->saved_diag(i)=1.0/this->operator()(i,i);
- j_min=std::max(0,i-this->num_lower());
- j_max=std::min(this->dim()-1,i+this->num_upper());
- for(int j=j_min; j<=j_max; j++) {
- this->operator()(i,j) *= this->saved_diag(i);
- }
- this->operator()(i,i)=1.0; // prevents rounding errors
- }
-
- // Gauss LR-Decomposition
- for(int k=0; kdim(); k++) {
- i_max=std::min(this->dim()-1,k+this->num_lower()); // num_lower not a mistake!
- for(int i=k+1; i<=i_max; i++) {
- assert(this->operator()(k,k)!=0.0);
- x=-this->operator()(i,k)/this->operator()(k,k);
- this->operator()(i,k)=-x; // assembly part of L
- j_max=std::min(this->dim()-1,k+this->num_upper());
- for(int j=k+1; j<=j_max; j++) {
- // assembly part of R
- this->operator()(i,j)=this->operator()(i,j)+x*this->operator()(k,j);
- }
- }
- }
-}
-// solves Ly=b
-std::vector band_matrix::l_solve(const std::vector& b) const
-{
- assert( this->dim()==(int)b.size() );
- std::vector x(this->dim());
- int j_start;
- double sum;
- for(int i=0; idim(); i++) {
- sum=0;
- j_start=std::max(0,i-this->num_lower());
- for(int j=j_start; joperator()(i,j)*x[j];
- x[i]=(b[i]*this->saved_diag(i)) - sum;
- }
- return x;
-}
-// solves Rx=y
-std::vector band_matrix::r_solve(const std::vector& b) const
-{
- assert( this->dim()==(int)b.size() );
- std::vector x(this->dim());
- int j_stop;
- double sum;
- for(int i=this->dim()-1; i>=0; i--) {
- sum=0;
- j_stop=std::min(this->dim()-1,i+this->num_upper());
- for(int j=i+1; j<=j_stop; j++) sum += this->operator()(i,j)*x[j];
- x[i]=( b[i] - sum ) / this->operator()(i,i);
- }
- return x;
-}
-
-std::vector band_matrix::lu_solve(const std::vector& b,
- bool is_lu_decomposed)
-{
- assert( this->dim()==(int)b.size() );
- std::vector x,y;
- if(is_lu_decomposed==false) {
- this->lu_decompose();
- }
- y=this->l_solve(b);
- x=this->r_solve(y);
- return x;
-}
-
-// machine precision of a double, i.e. the successor of 1 is 1+eps
-double get_eps()
-{
- //return std::numeric_limits::epsilon(); // __DBL_EPSILON__
- return 2.2204460492503131e-16; // 2^-52
-}
-
-// solutions for a + b*x = 0
-std::vector solve_linear(double a, double b)
-{
- std::vector x; // roots
- if(b==0.0) {
- if(a==0.0) {
- // 0*x = 0
- x.resize(1);
- x[0] = 0.0; // any x solves it but we need to pick one
- return x;
- } else {
- // 0*x + ... = 0, no solution
- return x;
- }
- } else {
- x.resize(1);
- x[0] = -a/b;
- return x;
- }
-}
-
-// solutions for a + b*x + c*x^2 = 0
-std::vector solve_quadratic(double a, double b, double c,
- int newton_iter=0)
-{
- if(c==0.0) {
- return solve_linear(a,b);
- }
- // rescale so that we solve x^2 + 2p x + q = (x+p)^2 + q - p^2 = 0
- double p=0.5*b/c;
- double q=a/c;
- double discr = p*p-q;
- const double eps=0.5*internal::get_eps();
- double discr_err = (6.0*(p*p)+3.0*fabs(q)+fabs(discr))*eps;
-
- std::vector x; // roots
- if(fabs(discr)<=discr_err) {
- // discriminant is zero --> one root
- x.resize(1);
- x[0] = -p;
- } else if(discr<0) {
- // no root
- } else {
- // two roots
- x.resize(2);
- x[0] = -p - sqrt(discr);
- x[1] = -p + sqrt(discr);
- }
-
- // improve solution via newton steps
- for(size_t i=0; i1e-8) {
- x[i] -= f/f1;
- }
- }
- }
-
- return x;
-}
-
-// solutions for the cubic equation: a + b*x +c*x^2 + d*x^3 = 0
-// this is a naive implementation of the analytic solution without
-// optimisation for speed or numerical accuracy
-// newton_iter: number of newton iterations to improve analytical solution
-// see also
-// gsl: gsl_poly_solve_cubic() in solve_cubic.c
-// octave: roots.m - via eigenvalues of the Frobenius companion matrix
-std::vector solve_cubic(double a, double b, double c, double d,
- int newton_iter)
-{
- if(d==0.0) {
- return solve_quadratic(a,b,c,newton_iter);
- }
-
- // convert to normalised form: a + bx + cx^2 + x^3 = 0
- if(d!=1.0) {
- a/=d;
- b/=d;
- c/=d;
- }
-
- // convert to depressed cubic: z^3 - 3pz - 2q = 0
- // via substitution: z = x + c/3
- std::vector z; // roots of the depressed cubic
- double p = -(1.0/3.0)*b + (1.0/9.0)*(c*c);
- double r = 2.0*(c*c)-9.0*b;
- double q = -0.5*a - (1.0/54.0)*(c*r);
- double discr=p*p*p-q*q; // discriminant
- // calculating numerical round-off errors with assumptions:
- // - each operation is precise but each intermediate result x
- // when stored has max error of x*eps
- // - only multiplication with a power of 2 introduces no new error
- // - a,b,c,d and some fractions (e.g. 1/3) have rounding errors eps
- // - p_err << |p|, q_err << |q|, ... (this is violated in rare cases)
- // would be more elegant to use boost::numeric::interval
- const double eps = internal::get_eps();
- double p_err = eps*((3.0/3.0)*fabs(b)+(4.0/9.0)*(c*c)+fabs(p));
- double r_err = eps*(6.0*(c*c)+18.0*fabs(b)+fabs(r));
- double q_err = 0.5*fabs(a)*eps + (1.0/54.0)*fabs(c)*(r_err+fabs(r)*3.0*eps)
- + fabs(q)*eps;
- double discr_err = (p*p) * (3.0*p_err + fabs(p)*2.0*eps)
- + fabs(q) * (2.0*q_err + fabs(q)*eps) + fabs(discr)*eps;
-
- // depending on the discriminant we get different solutions
- if(fabs(discr)<=discr_err) {
- // discriminant zero: one or two real roots
- if(fabs(p)<=p_err) {
- // p and q are zero: single root
- z.resize(1);
- z[0] = 0.0; // triple root
- } else {
- z.resize(2);
- z[0] = 2.0*q/p; // single root
- z[1] = -0.5*z[0]; // double root
- }
- } else if(discr>0) {
- // three real roots: via trigonometric solution
- z.resize(3);
- double ac = (1.0/3.0) * acos( q/(p*sqrt(p)) );
- double sq = 2.0*sqrt(p);
- z[0] = sq * cos(ac);
- z[1] = sq * cos(ac-2.0*M_PI/3.0);
- z[2] = sq * cos(ac-4.0*M_PI/3.0);
- } else if (discr<0.0) {
- // single real root: via Cardano's fromula
- z.resize(1);
- double sgnq = (q >= 0 ? 1 : -1);
- double basis = fabs(q) + sqrt(-discr);
- double C = sgnq * pow(basis, 1.0/3.0); // c++11 has std::cbrt()
- z[0] = C + p/C;
- }
- for(size_t i=0; i1e-8) {
- z[i] -= f/f1;
- }
- }
- }
- // ensure if a=0 we get exactly x=0 as root
- // TODO: remove this fudge
- if(a==0.0) {
- assert(z.size()>0); // cubic should always have at least one root
- double xmin=fabs(z[0]);
- size_t imin=0;
- for(size_t i=1; ifabs(z[i])) {
- xmin=fabs(z[i]);
- imin=i;
- }
- }
- z[imin]=0.0; // replace the smallest absolute value with 0
- }
- std::sort(z.begin(), z.end());
- return z;
-}
-
-
-} // namespace internal
-
-
-} // namespace tk
-
-
-#if !defined(_MSC_VER)
-#pragma GCC diagnostic pop
-#endif
-
-#endif /* TK_SPLINE_H */
diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot
index accaf4ea66..4901a6b7a5 100644
--- a/localization/i18n/OrcaSlicer.pot
+++ b/localization/i18n/OrcaSlicer.pot
@@ -11108,6 +11108,19 @@ msgid ""
"easily."
msgstr ""
+msgid "Brim follows compensated outline"
+msgstr ""
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+
msgid "Brim ears"
msgstr ""
diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po
index cfb35a2480..d29d05b06b 100644
--- a/localization/i18n/ca/OrcaSlicer_ca.po
+++ b/localization/i18n/ca/OrcaSlicer_ca.po
@@ -12177,6 +12177,26 @@ msgstr ""
"Un espai entre la línia de la Vora d'Adherència més interna i l'objecte pot "
"fer que la Vora d'Adherència s'elimini més fàcilment"
+msgid "Brim follows compensated outline"
+msgstr "Vora d'Adherència segueix un esquema compensat"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Quan està activat, vora d'adherència s'alinea amb la geometria del perímetre de la primera capa "
+"després d'aplicar la compensació del peu d'elefant.\n"
+"Aquesta opció està pensada per als casos en què la compensació del peu d'elefant "
+"altera significativament la petjada de la primera capa.\n"
+"\n"
+"Si la vostra configuració actual ja funciona bé, activar-la pot ser innecessari i "
+"pot fer que el vora d'adherència es fusioni amb les capes superiors."
+
msgid "Brim ears"
msgstr "Orelles de la Vora d'Adherència"
diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po
index 9cc4976536..933c3b3504 100644
--- a/localization/i18n/cs/OrcaSlicer_cs.po
+++ b/localization/i18n/cs/OrcaSlicer_cs.po
@@ -11730,6 +11730,26 @@ msgid ""
msgstr ""
"Mezera mezi nejvnitřnějším límcem a předmětem může usnadnit odstranění límce"
+msgid "Brim follows compensated outline"
+msgstr "Límec sleduje kompenzovaný obrys"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Když je povoleno, límec je zarovnán s obvodovou geometrií první vrstvy "
+"po použití kompenzace sloní nohy.\n"
+"Tato možnost je určena pro případy, kdy je kompenzace sloní nohy "
+"výrazně mění stopu první vrstvy.\n"
+"\n"
+"Pokud vaše aktuální nastavení již funguje dobře, jeho povolení může být zbytečné a "
+"může způsobit spojení límec s horními vrstvami."
+
msgid "Brim ears"
msgstr "Uši límce"
diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po
index f0a0be35b4..15b84734a4 100644
--- a/localization/i18n/de/OrcaSlicer_de.po
+++ b/localization/i18n/de/OrcaSlicer_de.po
@@ -12766,6 +12766,26 @@ msgstr ""
"Eine Lücke zwischen der innersten Randlinie und dem Objekt kann das Abnehmen "
"des Randes erleichtern"
+msgid "Brim follows compensated outline"
+msgstr "Umrandung folgt einem kompensierten Umriss"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Wenn diese Option aktiviert ist, wird umrandung an der Umfangsgeometrie der ersten Ebene ausgerichtet "
+"nach Anwendung der Elefantenfußkompensation.\n"
+"Diese Option ist für Fälle gedacht, in denen eine Elefantenfuß-Entschädigung vorliegt "
+"verändert den Footprint der ersten Schicht erheblich.\n"
+"\n"
+"Wenn Ihr aktuelles Setup bereits gut funktioniert, kann es unnötig sein, es zu aktivieren "
+"kann dazu führen, dass der umrandung mit den oberen Schichten verschmilzt."
+
msgid "Brim ears"
msgstr "Brim Ohren"
diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po
index 647f62ee13..02b4dd6c18 100644
--- a/localization/i18n/en/OrcaSlicer_en.po
+++ b/localization/i18n/en/OrcaSlicer_en.po
@@ -11327,6 +11327,26 @@ msgstr ""
"This creates a gap between the innermost brim line and the object and can "
"make the brim easier to remove."
+msgid "Brim follows compensated outline"
+msgstr "Brim follows compensated outline"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+
msgid "Brim ears"
msgstr ""
diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po
index 85079d85fe..19c81d480d 100644
--- a/localization/i18n/es/OrcaSlicer_es.po
+++ b/localization/i18n/es/OrcaSlicer_es.po
@@ -12147,6 +12147,26 @@ msgstr ""
"Un hueco entre la línea más interna del borde de adherencia y el objeto "
"puede hacer que el borde de adherencia se retire más fácilmente"
+msgid "Brim follows compensated outline"
+msgstr "Borde de adherencia sigue el esquema compensado"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Cuando está habilitado, el borde de adherencia está alineado con la geometría del perímetro de la primera capa "
+"después de aplicar la compensación de pata de elefante.\n"
+"Esta opción está destinada a casos en los que la Compensación por pata de elefante "
+"altera significativamente la huella de la primera capa.\n"
+"\n"
+"Si su configuración actual ya funciona bien, habilitarla puede ser innecesario y "
+"puede hacer que el borde de adherencia se fusione con las capas superiores."
+
msgid "Brim ears"
msgstr "Orejas de borde"
diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po
index 1dd903bc10..5a80f34757 100644
--- a/localization/i18n/fr/OrcaSlicer_fr.po
+++ b/localization/i18n/fr/OrcaSlicer_fr.po
@@ -12298,6 +12298,26 @@ msgstr ""
"Un espace entre la ligne de bord la plus interne et l'objet peut faciliter "
"le retrait du bord"
+msgid "Brim follows compensated outline"
+msgstr "Bordure suit le contour compensé"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Lorsqu'il est activé, le bordure est aligné avec la géométrie du périmètre de la première couche "
+"après l'application de la compensation du pied d'éléphant.\n"
+"Cette option est destinée aux cas où la compensation du pied d'éléphant "
+"modifie considérablement l’empreinte de la première couche.\n"
+"\n"
+"Si votre configuration actuelle fonctionne déjà bien, son activation peut être inutile et "
+"peut provoquer la fusion du bordure avec les couches supérieures."
+
msgid "Brim ears"
msgstr "Bordures à oreilles"
diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po
index ddd70907ba..ba898f64ac 100644
--- a/localization/i18n/hu/OrcaSlicer_hu.po
+++ b/localization/i18n/hu/OrcaSlicer_hu.po
@@ -11603,6 +11603,26 @@ msgstr ""
"A legbelső peremvonal és a tárgy közötti rés, ami megkönnyítheti a perem "
"eltávolítását"
+msgid "Brim follows compensated outline"
+msgstr "A Perem a kompenzált körvonalat követi"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Ha engedélyezve van, a perem igazodik az első réteg kerületi geometriájához "
+"az elefánttalp-kompenzáció alkalmazása után.\n"
+"Ez az opció arra az esetre szolgál, amikor az elefánttalp-kompenzáció "
+"jelentősen megváltoztatja az első réteg alapterületét.\n"
+"\n"
+"Ha a jelenlegi beállítás már jól működik, előfordulhat, hogy az engedélyezése felesleges és "
+"a perem összeolvadását okozhatja a felső rétegekkel."
+
msgid "Brim ears"
msgstr "Karimás fülek"
diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po
index 43ee2d09c0..222467d02a 100644
--- a/localization/i18n/it/OrcaSlicer_it.po
+++ b/localization/i18n/it/OrcaSlicer_it.po
@@ -12234,6 +12234,26 @@ msgstr ""
"Crea uno spazio tra la linea più interna della tesa e l'oggetto per rendere "
"più facile la rimozione della tesa."
+msgid "Brim follows compensated outline"
+msgstr "Tesa segue il contorno compensato"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Quando abilitato, tesa è allineato con la geometria perimetrale del primo strato "
+"dopo l'applicazione della compensazione del piede di elefante.\n"
+"Questa opzione è prevista per i casi in cui è prevista la compensazione del piede di elefante "
+"altera significativamente l'impronta del primo strato.\n"
+"\n"
+"Se la tua configurazione attuale funziona già bene, abilitarla potrebbe non essere necessaria e "
+"può causare la fusione del tesa con gli strati superiori."
+
msgid "Brim ears"
msgstr "Tesa ad orecchio"
diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po
index 120ccae558..3258a45800 100644
--- a/localization/i18n/ja/OrcaSlicer_ja.po
+++ b/localization/i18n/ja/OrcaSlicer_ja.po
@@ -11394,6 +11394,26 @@ msgstr ""
"ブリムを取り外しやすくする為、一番内側のブリムラインをモデルと少し距離を設け"
"ます。"
+msgid "Brim follows compensated outline"
+msgstr "ブリム は補正されたアウトラインに従います"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"有効にすると、ブリム は最初の層の周囲ジオメトリと位置合わせされます。 "
+"エレファント・フット・コンペンセーション適用後。\n"
+"このオプションは、象の足の補正が必要な場合を対象としています。 "
+"最初の層のフットプリントを大幅に変更します。\n"
+"\n"
+"現在の設定がすでにうまく機能している場合は、それを有効にする必要はないかもしれません。 "
+"ブリム が上位層と融合する可能性があります。"
+
msgid "Brim ears"
msgstr ""
diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po
index fbc550e415..cf3d9dea71 100644
--- a/localization/i18n/ko/OrcaSlicer_ko.po
+++ b/localization/i18n/ko/OrcaSlicer_ko.po
@@ -11817,6 +11817,26 @@ msgstr ""
"가장 안쪽 브림 라인과 객체 사이에 간격을 주어 쉽게 브림을 제거 할 수 있게 합"
"니다"
+msgid "Brim follows compensated outline"
+msgstr "브림는 보상된 아웃라인을 따릅니다."
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"활성화되면 브림은 첫 번째 레이어 주변 형상과 정렬됩니다 "
+"코끼리 발 보정이 적용된 후.\n"
+"이 옵션은 코끼리 발 보상이 적용되는 경우를 위한 것입니다 "
+"첫 번째 레이어 공간을 크게 변경합니다.\n"
+"\n"
+"현재 설정이 이미 잘 작동하는 경우 활성화할 필요가 없으며 "
+"브림이 상위 레이어와 융합될 수 있습니다."
+
msgid "Brim ears"
msgstr "브림 귀"
diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po
index 052250e63f..ec9f6ce417 100644
--- a/localization/i18n/lt/OrcaSlicer_lt.po
+++ b/localization/i18n/lt/OrcaSlicer_lt.po
@@ -12183,6 +12183,26 @@ msgstr ""
"Sukuriamas tarpas tarp vidinės krašto linijos ir objekto, todėl galima "
"lengviau jį atskirti."
+msgid "Brim follows compensated outline"
+msgstr "Kraštas atitinka kompensuotą kontūrą"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Kai įjungta, kraštas yra sulygiuotas su pirmojo sluoksnio perimetro geometrija "
+"pritaikius dramblio pėdos kompensaciją.\n"
+"Ši parinktis skirta tais atvejais, kai kompensuojama dramblio pėda "
+"žymiai pakeičia pirmojo sluoksnio pėdsaką.\n"
+"\n"
+"Jei dabartinė sąranka jau veikia gerai, jos įjungti gali nebūti ir "
+"gali sukelti kraštas susiliejimą su viršutiniais sluoksniais."
+
msgid "Brim ears"
msgstr "Krašto \"ausys\""
diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po
index 2f1c24f60d..923ea51aec 100644
--- a/localization/i18n/nl/OrcaSlicer_nl.po
+++ b/localization/i18n/nl/OrcaSlicer_nl.po
@@ -11751,6 +11751,26 @@ msgstr ""
"Dit creëert ruimte tussen de binnenste brimlijn en het object en zorgt "
"ervoor dat het object eenvoudiger van het printbed kan worden verwijderd."
+msgid "Brim follows compensated outline"
+msgstr "Rand volgt de gecompenseerde omtrek"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Indien ingeschakeld, wordt de rand uitgelijnd met de omtrekgeometrie van de eerste laag "
+"nadat olifantenvoetcompensatie is toegepast.\n"
+"Deze optie is bedoeld voor gevallen waarin sprake is van olifantenvoetcompensatie "
+"verandert de voetafdruk van de eerste laag aanzienlijk.\n"
+"\n"
+"Als uw huidige configuratie al goed werkt, kan het inschakelen hiervan niet nodig zijn "
+"kan ervoor zorgen dat de rand samensmelt met de bovenste lagen."
+
msgid "Brim ears"
msgstr "Rand oren"
diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po
index 81afc09e9b..5c2896d962 100644
--- a/localization/i18n/pl/OrcaSlicer_pl.po
+++ b/localization/i18n/pl/OrcaSlicer_pl.po
@@ -12130,6 +12130,26 @@ msgstr ""
"Szczelina między najbardziej wewnętrzną linią brimu a obiektem może ułatwić "
"usunięcie brimu"
+msgid "Brim follows compensated outline"
+msgstr "Brim podąża za skompensowanym konturem"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Po włączeniu brim jest wyrównany z geometrią obwodu pierwszej warstwy "
+"po zastosowaniu Kompensacji Stopy Słonia.\n"
+"Ta opcja jest przeznaczona dla przypadków, w których występuje kompensacja stopy słonia "
+"znacząco zmienia ślad pierwszej warstwy.\n"
+"\n"
+"Jeśli Twoja bieżąca konfiguracja już działa dobrze, włączenie jej może być niepotrzebne i "
+"może spowodować stopienie brim z górnymi warstwami."
+
msgid "Brim ears"
msgstr "Uszy brim"
diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
index 73fcdb50ea..cffab32de6 100644
--- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
+++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
@@ -12555,6 +12555,26 @@ msgstr ""
"Um espaço entre a linha mais interna da borda e o objeto pode facilitar a "
"remoção da borda."
+msgid "Brim follows compensated outline"
+msgstr "Borda segue contorno compensado"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Quando ativado, o borda fica alinhado com a geometria do perímetro da primeira camada "
+"após a aplicação da Compensação da Pé de Elefante.\n"
+"Esta opção destina-se aos casos em que a Compensação da Pé de Elefante "
+"altera significativamente a pegada da primeira camada.\n"
+"\n"
+"Se a sua configuração atual já funciona bem, ativá-la pode ser desnecessário e "
+"pode fazer com que o borda se funda com as camadas superiores."
+
msgid "Brim ears"
msgstr "Orelhas da borda"
diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po
index d9ff700c16..4364ce8306 100644
--- a/localization/i18n/ru/OrcaSlicer_ru.po
+++ b/localization/i18n/ru/OrcaSlicer_ru.po
@@ -12291,6 +12291,26 @@ msgid ""
"easily."
msgstr "Смещение каймы от печатаемой модели, может облегчить её удаление."
+msgid "Brim follows compensated outline"
+msgstr "Кайма соответствует компенсированному контуру"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Если этот параметр включен, кайма выравнивается по геометрии периметра первого слоя "
+"после применения компенсации «слоновьей стопы».\n"
+"Эта опция предназначена для случаев, когда «Компенсация слоновой стопы» "
+"существенно изменяет след первого слоя.\n"
+"\n"
+"Если ваша текущая настройка уже работает хорошо, ее включение может быть ненужным и "
+"может привести к слиянию кайма с верхними слоями."
+
msgid "Brim ears"
msgstr "Ушки каймы"
diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po
index 04c2d4d565..ab1944d79e 100644
--- a/localization/i18n/sv/OrcaSlicer_sv.po
+++ b/localization/i18n/sv/OrcaSlicer_sv.po
@@ -11574,6 +11574,26 @@ msgstr ""
"Mellanrum mellan innersta brim linjen och objektet kan underlätta vid "
"borttagande av brim"
+msgid "Brim follows compensated outline"
+msgstr "Brim följer kompenserad disposition"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"När den är aktiverad, är brim justerad med det första lagrets omkretsgeometri "
+"efter att elefantfotskompensation tillämpas.\n"
+"Detta alternativ är avsett för fall där elefantfotskompensation "
+"förändrar det första skiktets fotavtryck avsevärt.\n"
+"\n"
+"Om din nuvarande inställning redan fungerar bra kan det vara onödigt att aktivera det och "
+"kan få brim att smälta samman med de övre lagren."
+
msgid "Brim ears"
msgstr "Brätte öron"
diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po
index a817dd919e..b10eacfc6e 100644
--- a/localization/i18n/tr/OrcaSlicer_tr.po
+++ b/localization/i18n/tr/OrcaSlicer_tr.po
@@ -12097,6 +12097,26 @@ msgstr ""
"En içteki kenar çizgisi ile nesne arasındaki boşluk, kenarlığın daha kolay "
"çıkarılmasını sağlayabilir."
+msgid "Brim follows compensated outline"
+msgstr "Kenar telafi edilen taslağı takip ediyor"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Etkinleştirildiğinde, kenar birinci katmanın çevre geometrisiyle hizalanır "
+"Fil Ayağı Telafisi uygulandıktan sonra.\n"
+"Bu seçenek Fil Ayağı Telafisinin geçerli olmadığı durumlar için tasarlanmıştır "
+"ilk katmanın ayak izini önemli ölçüde değiştirir.\n"
+"\n"
+"Mevcut kurulumunuz zaten iyi çalışıyorsa, bunu etkinleştirmek gereksiz olabilir ve "
+"kenar'in üst katmanlarla kaynaşmasına neden olabilir."
+
msgid "Brim ears"
msgstr "Kenar kulakları"
diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po
index 05482e66d1..296efbe5bd 100644
--- a/localization/i18n/uk/OrcaSlicer_uk.po
+++ b/localization/i18n/uk/OrcaSlicer_uk.po
@@ -12138,6 +12138,26 @@ msgstr ""
"Зазор між першою внутрішньою лінією кайми та об'єктом може сприяти легшому "
"відокремленню кайми"
+msgid "Brim follows compensated outline"
+msgstr "Кайма має компенсований контур"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Якщо ввімкнено, кайма вирівнюється з геометрією периметра першого рівня "
+"після застосування Elephant Foot Compensation.\n"
+"Ця опція призначена для випадків компенсації слонячої стопи "
+"значно змінює поверхню першого шару.\n"
+"\n"
+"Якщо ваші поточні налаштування вже працюють добре, увімкнення їх може бути непотрібним "
+"може призвести до злиття кайма з верхніми шарами."
+
msgid "Brim ears"
msgstr "Вушка кайми"
diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po
index f14576ceed..5017bc246f 100644
--- a/localization/i18n/vi/OrcaSlicer_vi.po
+++ b/localization/i18n/vi/OrcaSlicer_vi.po
@@ -11926,6 +11926,26 @@ msgstr ""
"Khoảng cách giữa đường brim trong cùng và đối tượng có thể làm cho brim dễ "
"dàng tháo hơn."
+msgid "Brim follows compensated outline"
+msgstr "Brim tuân theo phác thảo được bù đắp"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"Khi được bật, brim sẽ được căn chỉnh theo hình học chu vi lớp đầu tiên "
+"sau khi áp dụng Bồi thường bàn chân voi.\n"
+"Tùy chọn này dành cho các trường hợp Bồi thường chân voi "
+"làm thay đổi đáng kể dấu chân lớp đầu tiên.\n"
+"\n"
+"Nếu thiết lập hiện tại của bạn đã hoạt động tốt, việc bật nó có thể không cần thiết và "
+"có thể khiến brim kết hợp với các lớp trên."
+
msgid "Brim ears"
msgstr "Tai brim"
diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
index 952bd49555..8cad4e58a5 100644
--- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
+++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
@@ -2490,7 +2490,7 @@ msgid "Plate"
msgstr "盘"
msgid "Brim"
-msgstr "Brim"
+msgstr "边缘"
msgid "Object/Part Setting"
msgstr "对象/零件设置"
@@ -11493,6 +11493,26 @@ msgid ""
"easily."
msgstr "在brim和模型之间设置间隙,能够让brim更容易剥离"
+msgid "Brim follows compensated outline"
+msgstr "边缘 遵循补偿轮廓"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"启用后,边缘 与第一层周边几何体对齐 "
+"应用象脚补偿后。\n"
+"此选项适用于象脚补偿的情况 "
+"显着改变第一层足迹。\n"
+"\n"
+"如果您当前的设置已经运行良好,则可能没有必要启用它,并且 "
+"可以导致 边缘 与上层融合。"
+
msgid "Brim ears"
msgstr "圆盘"
diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
index 01c3669856..51d89cca21 100644
--- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
+++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
@@ -2493,7 +2493,7 @@ msgid "Plate"
msgstr "列印板"
msgid "Brim"
-msgstr "Brim"
+msgstr "邊緣"
msgid "Object/Part Setting"
msgstr "物件/零件 設定"
@@ -11560,6 +11560,26 @@ msgid ""
"easily."
msgstr "在 Brim 和模型之間設定間隙,能夠讓 Brim 更容易拆除"
+msgid "Brim follows compensated outline"
+msgstr "邊緣 遵循補償輪廓"
+
+msgid ""
+"When enabled, the brim is aligned with the first-layer perimeter geometry "
+"after Elephant Foot Compensation is applied.\n"
+"This option is intended for cases where Elephant Foot Compensation "
+"significantly alters the first-layer footprint.\n"
+"\n"
+"If your current setup already works well, enabling it may be unnecessary and "
+"can cause the brim to fuse with upper layers."
+msgstr ""
+"啟用後,邊緣 與第一層周邊幾何體對齊 "
+"應用像腳補償後。\n"
+"此選項適用於像腳補償的情況 "
+"顯著改變第一層足跡。\n"
+"\n"
+"如果您當前的設置已經運行良好,則可能沒有必要啟用它,並且 "
+"可以導致 邊緣 與上層融合。"
+
msgid "Brim ears"
msgstr "耳狀 Brim"
diff --git a/resources/images/axis_toggle.svg b/resources/images/axis_toggle.svg
deleted file mode 100644
index 679c34e5ca..0000000000
--- a/resources/images/axis_toggle.svg
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
diff --git a/resources/images/axis_toggle_dark.svg b/resources/images/axis_toggle_dark.svg
deleted file mode 100644
index 08c52a8398..0000000000
--- a/resources/images/axis_toggle_dark.svg
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
diff --git a/resources/images/axis_toggle_hover.svg b/resources/images/axis_toggle_hover.svg
deleted file mode 100644
index 1d462ffb1d..0000000000
--- a/resources/images/axis_toggle_hover.svg
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
diff --git a/resources/images/axis_toggle_hover_dark.svg b/resources/images/axis_toggle_hover_dark.svg
deleted file mode 100644
index 14f9bd2767..0000000000
--- a/resources/images/axis_toggle_hover_dark.svg
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
diff --git a/resources/images/canvas_menu.svg b/resources/images/canvas_menu.svg
new file mode 100644
index 0000000000..b94a4952f0
--- /dev/null
+++ b/resources/images/canvas_menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_menu_dark.svg b/resources/images/canvas_menu_dark.svg
new file mode 100644
index 0000000000..6578d79a9c
--- /dev/null
+++ b/resources/images/canvas_menu_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_menu_dark_hover.svg b/resources/images/canvas_menu_dark_hover.svg
new file mode 100644
index 0000000000..e71a5c9787
--- /dev/null
+++ b/resources/images/canvas_menu_dark_hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_menu_hover.svg b/resources/images/canvas_menu_hover.svg
new file mode 100644
index 0000000000..83fbddee17
--- /dev/null
+++ b/resources/images/canvas_menu_hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_zoom.svg b/resources/images/canvas_zoom.svg
new file mode 100644
index 0000000000..5448cd7cee
--- /dev/null
+++ b/resources/images/canvas_zoom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_zoom_dark.svg b/resources/images/canvas_zoom_dark.svg
new file mode 100644
index 0000000000..9e598f8cba
--- /dev/null
+++ b/resources/images/canvas_zoom_dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_zoom_dark_hover.svg b/resources/images/canvas_zoom_dark_hover.svg
new file mode 100644
index 0000000000..6d7e4e5fcb
--- /dev/null
+++ b/resources/images/canvas_zoom_dark_hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/canvas_zoom_hover.svg b/resources/images/canvas_zoom_hover.svg
new file mode 100644
index 0000000000..53f272d28d
--- /dev/null
+++ b/resources/images/canvas_zoom_hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/param_zig-zag.svg b/resources/images/param_zig-zag.svg
deleted file mode 100644
index 0c062058bc..0000000000
--- a/resources/images/param_zig-zag.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json
index 3ea31a77ae..2c42cc077b 100644
--- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json
+++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json
@@ -41,7 +41,7 @@
"before_layer_change_gcode": "; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm",
"best_object_pos": "0.5,0.5",
"change_extrusion_role_gcode": "",
- "change_filament_gcode": "",
+ "change_filament_gcode": "; FLUSH_START\n;;; M400 P0\nT[next_extruder] ; change extruder\n; 1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X261 Y25 F12000\n;;; G1 Y1 F600\n;;; M400 P2730\n;;; G1 Y25 F3000\n;;; M400 P76250\n;;; M400 P35780\n; 2.1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X47 Y230 F12000\n;;; M400 P0\n; 2.2\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n; 3.1\n;;; G1 F36000\n;;; G1 Y250\n;;; G1 F8000\n;;; G1 X81\n;;; G1 Y273\n; 3.2\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n; 3.3\n;;; G1 X72\n;;; G1 X77\n;;; G1 Z{toolchange_z}\n;;; M400 P0\n; FLUSH_END",
"cooling_tube_length": "0",
"cooling_tube_retraction": "0",
"deretraction_speed": [
@@ -228,4 +228,4 @@
"Slope Lift"
],
"z_offset": "0"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json
index 9425300cb4..fdc096c888 100644
--- a/resources/profiles/BBL.json
+++ b/resources/profiles/BBL.json
@@ -1405,6 +1405,10 @@
"name": "Generic PLA-CF @base",
"sub_path": "filament/Generic PLA-CF @base.json"
},
+ {
+ "name": "Numakers PLA+ @base",
+ "sub_path": "filament/Numakers/Numakers PLA+ @base.json"
+ },
{
"name": "Overture Matte PLA @base",
"sub_path": "filament/Overture/Overture Matte PLA @base.json"
@@ -1458,12 +1462,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
},
{
- "name": "Panchroma PLA Silk @base",
- "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
+ "name": "Panchroma PLA Satin @base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @base.json"
},
{
- "name": "Panchroma PLA Stain @base",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json"
+ "name": "Panchroma PLA Silk @base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
},
{
"name": "Panchroma PLA Starlight @base",
@@ -5101,6 +5105,42 @@
"name": "Generic PLA-CF @BBL P2S",
"sub_path": "filament/Generic PLA-CF @BBL P2S.json"
},
+ {
+ "name": "Numakers PLA+ @BBL A1",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL A1 0.2 nozzle",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1 0.2 nozzle.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL A1M",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL A1M 0.2 nozzle",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M 0.2 nozzle.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL P1P",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL P1P 0.2 nozzle",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P 0.2 nozzle.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL X1",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL X1C",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C.json"
+ },
+ {
+ "name": "Numakers PLA+ @BBL X1C 0.2 nozzle",
+ "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C 0.2 nozzle.json"
+ },
{
"name": "Overture Matte PLA @BBL A1",
"sub_path": "filament/Overture/Overture Matte PLA @BBL A1.json"
@@ -5641,6 +5681,46 @@
"name": "Panchroma PLA Neon @BBL X1C 0.2 nozzle",
"sub_path": "filament/Polymaker/Panchroma PLA Neon @BBL X1C 0.2 nozzle.json"
},
+ {
+ "name": "Panchroma PLA Satin @BBL A1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL A1 0.2 nozzle",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1 0.2 nozzle.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL A1M",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1M.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL A1M 0.2 nozzle",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL A1M 0.2 nozzle.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL P1P",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL P1P.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL P1P 0.2 nozzle",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL P1P 0.2 nozzle.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL X1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL X1 0.2 nozzle",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1 0.2 nozzle.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL X1C",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1C.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @BBL X1C 0.2 nozzle",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @BBL X1C 0.2 nozzle.json"
+ },
{
"name": "Panchroma PLA Silk @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL A1.json"
@@ -5677,46 +5757,6 @@
"name": "Panchroma PLA Silk @BBL X1C",
"sub_path": "filament/Polymaker/Panchroma PLA Silk @BBL X1C.json"
},
- {
- "name": "Panchroma PLA Stain @BBL A1",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL A1M",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL P1P",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL X1",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL X1C",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C.json"
- },
- {
- "name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json"
- },
{
"name": "Panchroma PLA Starlight @BBL A1",
"sub_path": "filament/Polymaker/Panchroma PLA Starlight @BBL A1.json"
@@ -7661,46 +7701,6 @@
"name": "Overture TPU @BBL X1C 0.2 nozzle",
"sub_path": "filament/Overture/Overture TPU @BBL X1C 0.2 nozzle.json"
},
- {
- "name": "Numakers PLA+ @base",
- "sub_path": "filament/Numakers/Numakers PLA+ @base.json"
- },
- {
- "name": "Numakers PLA+ @BBL A1",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1.json"
- },
- {
- "name": "Numakers PLA+ @BBL A1 0.2 nozzle",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1 0.2 nozzle.json"
- },
- {
- "name": "Numakers PLA+ @BBL A1M",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M.json"
- },
- {
- "name": "Numakers PLA+ @BBL A1M 0.2 nozzle",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL A1M 0.2 nozzle.json"
- },
- {
- "name": "Numakers PLA+ @BBL P1P",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P.json"
- },
- {
- "name": "Numakers PLA+ @BBL P1P 0.2 nozzle",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL P1P 0.2 nozzle.json"
- },
- {
- "name": "Numakers PLA+ @BBL X1",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1.json"
- },
- {
- "name": "Numakers PLA+ @BBL X1C",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C.json"
- },
- {
- "name": "Numakers PLA+ @BBL X1C 0.2 nozzle",
- "sub_path": "filament/Numakers/Numakers PLA+ @BBL X1C 0.2 nozzle.json"
- },
{
"name": "fdm_filament_dual_common",
"sub_path": "filament/fdm_filament_dual_common.json"
diff --git a/resources/profiles/BBL/Bambu Lab P2S_cover.png b/resources/profiles/BBL/Bambu Lab P2S_cover.png
index febba125ee..30982b863a 100644
Binary files a/resources/profiles/BBL/Bambu Lab P2S_cover.png and b/resources/profiles/BBL/Bambu Lab P2S_cover.png differ
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1 0.2 nozzle.json
similarity index 74%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1 0.2 nozzle.json
index 1db86a72e8..886b3217cc 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1 0.2 nozzle.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL A1 0.2 nozzle",
+ "renamed_from": "Panchroma PLA Stain @BBL A1 0.2 nozzle",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_01",
"instantiation": "true",
@@ -26,4 +27,4 @@
"slow_down_layer_time": [
"5"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1.json
similarity index 79%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1.json
index 6f573a8f19..93520a1eda 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL A1",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL A1",
+ "renamed_from": "Panchroma PLA Stain @BBL A1",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_00",
"instantiation": "true",
@@ -28,4 +29,4 @@
"slow_down_layer_time": [
"5"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M 0.2 nozzle.json
similarity index 74%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M 0.2 nozzle.json
index 7510aa9ebf..b6689b1ee8 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M 0.2 nozzle.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL A1M 0.2 nozzle",
+ "renamed_from": "Panchroma PLA Stain @BBL A1M 0.2 nozzle",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_03",
"instantiation": "true",
@@ -26,4 +27,4 @@
"slow_down_layer_time": [
"5"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M.json
similarity index 79%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M.json
index 620a76ffe4..800a4bb8bc 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL A1M.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL A1M.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL A1M",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL A1M",
+ "renamed_from": "Panchroma PLA Stain @BBL A1M",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_02",
"instantiation": "true",
@@ -28,4 +29,4 @@
"slow_down_layer_time": [
"5"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P 0.2 nozzle.json
similarity index 74%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P 0.2 nozzle.json
index 00cf4852a1..e6b2d27440 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P 0.2 nozzle.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL P1P 0.2 nozzle",
+ "renamed_from": "Panchroma PLA Stain @BBL P1P 0.2 nozzle",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_05",
"instantiation": "true",
@@ -26,4 +27,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P.json
similarity index 79%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P.json
index 88678c3159..7e9c805c63 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL P1P.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL P1P.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL P1P",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL P1P",
+ "renamed_from": "Panchroma PLA Stain @BBL P1P",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_04",
"instantiation": "true",
@@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1 0.2 nozzle.json
similarity index 74%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1 0.2 nozzle.json
index 435a9c991a..3a07dcb602 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1 0.2 nozzle.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL X1 0.2 nozzle",
+ "renamed_from": "Panchroma PLA Stain @BBL X1 0.2 nozzle",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_07",
"instantiation": "true",
@@ -26,4 +27,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1.json
similarity index 79%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1.json
index e5d9bfdf3a..be4651c5f4 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL X1",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL X1",
+ "renamed_from": "Panchroma PLA Stain @BBL X1",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_06",
"instantiation": "true",
@@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C 0.2 nozzle.json
similarity index 77%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C 0.2 nozzle.json
index d4f02ff39a..0254f8e61e 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C 0.2 nozzle.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL X1C 0.2 nozzle",
+ "renamed_from": "Panchroma PLA Stain @BBL X1C 0.2 nozzle",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_09",
"instantiation": "true",
@@ -28,4 +29,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C.json
similarity index 84%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C.json
index 1d50deee52..0449da66b0 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @BBL X1C.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @BBL X1C.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @BBL X1C",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @BBL X1C",
+ "renamed_from": "Panchroma PLA Stain @BBL X1C",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "GFSPM005_08",
"instantiation": "true",
@@ -34,4 +35,4 @@
"slow_down_layer_time": [
"15"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json
similarity index 88%
rename from resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json
rename to resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json
index b2cb2b8cf3..26d3344d4b 100644
--- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Stain @base.json
+++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json
@@ -1,6 +1,7 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @base",
+ "renamed_from": "Panchroma PLA Stain @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "GFPM005",
@@ -38,4 +39,4 @@
"temperature_vitrification": [
"59"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/BBL/machine/fdm_machine_common.json b/resources/profiles/BBL/machine/fdm_machine_common.json
index 0073ac6a8a..566d3960ed 100644
--- a/resources/profiles/BBL/machine/fdm_machine_common.json
+++ b/resources/profiles/BBL/machine/fdm_machine_common.json
@@ -136,7 +136,7 @@
"60"
],
"scan_first_layer": "0",
- "enable_power_loss_recovery": "1",
+ "enable_power_loss_recovery": "printer_configuration",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"support_air_filtration": "0",
diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json
index b7c03f3f96..b7605cb457 100644
--- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json
+++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json
@@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
+ "nozzle_volume": [
+ "156"
+ ],
"retract_before_wipe": [
"0%"
],
@@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
- "25"
+ "0"
],
"retract_when_changing_layer": [
"0"
@@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
- "1"
+ "0"
+ ],
+ "enable_filament_ramming": [
+ "0"
],
"z_hop_types": "Spiral Lift"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json
index 7dabbd7f08..391b37301d 100644
--- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json
+++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json
@@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
+ "nozzle_volume": [
+ "156"
+ ],
"retract_before_wipe": [
"0%"
],
@@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
- "25"
+ "0"
],
"retract_when_changing_layer": [
"0"
@@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
- "1"
+ "0"
+ ],
+ "enable_filament_ramming": [
+ "0"
],
"z_hop_types": "Spiral Lift"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json
index 518acb39cd..b33d7e5a5c 100644
--- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json
+++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json
@@ -11,6 +11,9 @@
"nozzle_diameter": [
"0.4"
],
+ "nozzle_volume": [
+ "156"
+ ],
"retract_before_wipe": [
"0%"
],
@@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
- "25"
+ "0"
],
"retract_when_changing_layer": [
"0"
@@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
- "1"
+ "0"
+ ],
+ "enable_filament_ramming": [
+ "0"
],
"z_hop_types": "Spiral Lift"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json
index 8a49ec2f87..3ee7b4e79b 100644
--- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json
+++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json
@@ -10,6 +10,9 @@
"printer_variant": "0.4",
"nozzle_diameter": [
"0.4"
+ ],
+ "nozzle_volume": [
+ "156"
],
"retract_before_wipe": [
"0%"
@@ -132,7 +135,7 @@
"0"
],
"parking_pos_retraction": [
- "25"
+ "0"
],
"retract_when_changing_layer": [
"0"
@@ -141,7 +144,10 @@
"0"
],
"high_current_on_filament_swap": [
- "1"
+ "0"
+ ],
+ "enable_filament_ramming": [
+ "0"
],
"z_hop_types": "Spiral Lift"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json
index 7f7f0ab195..c1e7531397 100644
--- a/resources/profiles/Cubicon.json
+++ b/resources/profiles/Cubicon.json
@@ -7,10 +7,14 @@
{
"name": "Cubicon xCeler-I",
"sub_path": "machine/Cubicon xCeler-I.json"
+ },
+ {
+ "name": "Cubicon xCeler-Plus",
+ "sub_path": "machine/Cubicon xCeler-Plus.json"
}
],
"process_list": [
- {
+ {
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
@@ -19,88 +23,171 @@
"sub_path": "process/fdm_process_common_klipper.json"
},
{
- "name": "cubicon common @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "process/cubicon common @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "process template @base",
+ "sub_path": "process/process template @base.json"
},
{
- "name": "process template @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "process/process template @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "cubicon common @base",
+ "sub_path": "process/cubicon common @base.json"
},
{
"name": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
"sub_path": "process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json"
- }
+ },
+ {
+ "name": "cubicon default @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "process/cubicon default @Cubicon xCeler-Plus 0.4 nozzle.json"
+ }
],
"filament_list": [
- {
+ {
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
- {
- "name": "fdm_filament_abs",
- "sub_path": "filament/fdm_filament_abs.json"
- },
- {
- "name": "fdm_filament_pa",
- "sub_path": "filament/fdm_filament_pa.json"
- },
- {
- "name": "fdm_filament_pc",
- "sub_path": "filament/fdm_filament_pc.json"
- },
- {
- "name": "fdm_filament_pet",
- "sub_path": "filament/fdm_filament_pet.json"
- },
- {
+ {
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
- {
- "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json"
+ {
+ "name": "fdm_filament_abs",
+ "sub_path": "filament/fdm_filament_abs.json"
},
- {
- "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json"
+ {
+ "name": "fdm_filament_pc",
+ "sub_path": "filament/fdm_filament_pc.json"
},
- {
- "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json"
+ {
+ "name": "fdm_filament_pet",
+ "sub_path": "filament/fdm_filament_pet.json"
},
+ {
+ "name": "fdm_filament_pa",
+ "sub_path": "filament/fdm_filament_pa.json"
+ },
{
- "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "Cubicon PLA @base",
+ "sub_path": "filament/Cubicon PLA @base.json"
},
{
"name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
"sub_path": "filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PLA+ @base",
+ "sub_path": "filament/Cubicon PLA+ @base.json"
+ },
+ {
+ "name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+
+ {
+ "name": "Cubicon PLAi21 @base",
+ "sub_path": "filament/Cubicon PLAi21 @base.json"
+ },
+ {
+ "name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABS @base",
+ "sub_path": "filament/Cubicon ABS @base.json"
+ },
+ {
+ "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABSk @base",
+ "sub_path": "filament/Cubicon ABSk @base.json"
+ },
+ {
+ "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABS-A100 @base",
+ "sub_path": "filament/Cubicon ABS-A100 @base.json"
},
{
"name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
"sub_path": "filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PETG @base",
+ "sub_path": "filament/Cubicon PETG @base.json"
},
{
- "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+
+ {
+ "name": "Cubicon PC @base",
+ "sub_path": "filament/Cubicon PC @base.json"
},
{
- "name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json"
+ },
+
+ {
+ "name": "Cubicon PA-CF @base",
+ "sub_path": "filament/Cubicon PA-CF @base.json"
},
{
- "name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle",
- "sub_path": "filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json"
+ "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
+ "sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json"
+ },
+ {
+ "name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json"
}
],
"machine_list": [
- {
+ {
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "Cubicon xCeler-I 0.4 nozzle",
"sub_path": "machine/Cubicon xCeler-I 0.4 nozzle.json"
- }
+ },
+ {
+ "name": "Cubicon xCeler-Plus 0.4 nozzle",
+ "sub_path": "machine/Cubicon xCeler-Plus 0.4 nozzle.json"
+ }
]
}
\ No newline at end of file
diff --git a/resources/profiles/Cubicon/Cubicon xCeler-I_cover.png b/resources/profiles/Cubicon/Cubicon xCeler-I_cover.png
index d563958139..869c09f040 100644
Binary files a/resources/profiles/Cubicon/Cubicon xCeler-I_cover.png and b/resources/profiles/Cubicon/Cubicon xCeler-I_cover.png differ
diff --git a/resources/profiles/Cubicon/Cubicon xCeler-Plus_cover.png b/resources/profiles/Cubicon/Cubicon xCeler-Plus_cover.png
new file mode 100644
index 0000000000..039818b219
Binary files /dev/null and b/resources/profiles/Cubicon/Cubicon xCeler-Plus_cover.png differ
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json
index 504774ebde..e94c140f14 100644
--- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,71 +1,13 @@
{
"type": "filament",
- "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_filament_abs",
- "filament_id": "P510cfb0",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "ABS"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "hot_plate_temp": [
- "115"
- ],
- "hot_plate_temp_initial_layer": [
- "115"
- ],
- "close_fan_the_first_x_layers": [
- "3"
- ],
- "fan_cooling_layer_time": [
- "30"
- ],
- "filament_density": [
- "1.24"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "25"
- ],
- "nozzle_temperature_initial_layer": [
- "240"
- ],
- "fan_max_speed": [
- "80"
- ],
- "fan_min_speed": [
- "70"
- ],
- "slow_down_min_speed": [
- "30"
- ],
- "slow_down_layer_time": [
- "3"
- ],
- "nozzle_temperature": [
- "245"
- ],
- "temperature_vitrification": [
- "78"
- ],
- "nozzle_temperature_range_low": [
- "220"
- ],
- "nozzle_temperature_range_high": [
- "260"
- ],
- "additional_cooling_fan_speed": [
- "0"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon ABS @base",
+ "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABS @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..9cddacd80f
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon ABS @base",
+ "name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json
new file mode 100644
index 0000000000..6e5cddd5cc
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json
@@ -0,0 +1,73 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+
+ "filament_id": "P510cfb0",
+
+ "name": "Cubicon ABS @base",
+ "filament_settings_id": ["Cubicon ABS @base"],
+ "filament_vendor": ["Cubicon"],
+ "inherits": "fdm_filament_abs",
+ "filament_type": ["ABS"],
+ "is_custom_defined": "0",
+
+ "hot_plate_temp": [
+ "115"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "115"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "23"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "240"
+ ],
+ "fan_max_speed": [
+ "80"
+ ],
+ "fan_min_speed": [
+ "70"
+ ],
+ "slow_down_min_speed": [
+ "30"
+ ],
+ "slow_down_layer_time": [
+ "3"
+ ],
+ "nozzle_temperature": [
+ "245"
+ ],
+ "temperature_vitrification": [
+ "78"
+ ],
+ "nozzle_temperature_range_low": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "260"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json
index 036d5c0d3e..2192a5554d 100644
--- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,71 +1,13 @@
{
"type": "filament",
- "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
- "filament_id": "P510cfb1",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "ABS"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "hot_plate_temp": [
- "100"
- ],
- "hot_plate_temp_initial_layer": [
- "100"
- ],
- "close_fan_the_first_x_layers": [
- "3"
- ],
- "fan_cooling_layer_time": [
- "30"
- ],
- "filament_density": [
- "1.24"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "25"
- ],
- "nozzle_temperature_initial_layer": [
- "225"
- ],
- "fan_max_speed": [
- "80"
- ],
- "fan_min_speed": [
- "70"
- ],
- "slow_down_min_speed": [
- "30"
- ],
- "slow_down_layer_time": [
- "3"
- ],
- "nozzle_temperature": [
- "230"
- ],
- "temperature_vitrification": [
- "78"
- ],
- "nozzle_temperature_range_low": [
- "220"
- ],
- "nozzle_temperature_range_high": [
- "240"
- ],
- "additional_cooling_fan_speed": [
- "0"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon ABS-A100 @base",
+ "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..7d36014099
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon ABS-A100 @base",
+ "name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json
new file mode 100644
index 0000000000..9d797c70ee
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json
@@ -0,0 +1,74 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+ "default_filament_colour": "",
+ "filament_id": "P510cfb1",
+ "filament_settings_id": [
+ "Cubicon ABS-A100 @base"
+ ],
+ "filament_type": [
+ "ABS"
+ ],
+ "filament_vendor": [
+ "Cubicon"
+ ],
+ "inherits": "Cubicon ABS @base",
+ "is_custom_defined": "0",
+ "name": "Cubicon ABS-A100 @base",
+ "hot_plate_temp": [
+ "100"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "100"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "23"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "225"
+ ],
+ "fan_max_speed": [
+ "80"
+ ],
+ "fan_min_speed": [
+ "70"
+ ],
+ "slow_down_min_speed": [
+ "30"
+ ],
+ "slow_down_layer_time": [
+ "3"
+ ],
+ "nozzle_temperature": [
+ "230"
+ ],
+ "temperature_vitrification": [
+ "78"
+ ],
+ "nozzle_temperature_range_low": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json
index 55a64368b6..0526a82ae1 100644
--- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,71 +1,13 @@
{
"type": "filament",
- "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle",
- "filament_id": "P510cfb2",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "ABS"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "hot_plate_temp": [
- "115"
- ],
- "hot_plate_temp_initial_layer": [
- "115"
- ],
- "close_fan_the_first_x_layers": [
- "3"
- ],
- "fan_cooling_layer_time": [
- "30"
- ],
- "filament_density": [
- "1.24"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "25"
- ],
- "nozzle_temperature_initial_layer": [
- "240"
- ],
- "fan_max_speed": [
- "80"
- ],
- "fan_min_speed": [
- "70"
- ],
- "slow_down_min_speed": [
- "30"
- ],
- "slow_down_layer_time": [
- "3"
- ],
- "nozzle_temperature": [
- "240"
- ],
- "temperature_vitrification": [
- "85"
- ],
- "nozzle_temperature_range_low": [
- "220"
- ],
- "nozzle_temperature_range_high": [
- "240"
- ],
- "additional_cooling_fan_speed": [
- "0"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon ABSk @base",
+ "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..ab4f5fdac6
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon ABSk @base",
+ "name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json
new file mode 100644
index 0000000000..90d884388b
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json
@@ -0,0 +1,74 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+ "default_filament_colour": "",
+ "filament_id": "P510cfb2",
+ "filament_settings_id": [
+ "Cubicon ABSk @base"
+ ],
+ "filament_type": [
+ "ABS"
+ ],
+ "filament_vendor": [
+ "Cubicon"
+ ],
+ "inherits": "Cubicon ABS @base",
+ "is_custom_defined": "0",
+ "name": "Cubicon ABSk @base",
+ "hot_plate_temp": [
+ "115"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "115"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "23"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "240"
+ ],
+ "fan_max_speed": [
+ "80"
+ ],
+ "fan_min_speed": [
+ "70"
+ ],
+ "slow_down_min_speed": [
+ "30"
+ ],
+ "slow_down_layer_time": [
+ "3"
+ ],
+ "nozzle_temperature": [
+ "240"
+ ],
+ "temperature_vitrification": [
+ "85"
+ ],
+ "nozzle_temperature_range_low": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json
index 70b81652c1..89b9fedd35 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,71 +1,13 @@
{
"type": "filament",
- "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_filament_pa",
- "filament_id": "P510cfd0",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PA"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "hot_plate_temp": [
- "100"
- ],
- "hot_plate_temp_initial_layer": [
- "100"
- ],
- "close_fan_the_first_x_layers": [
- "3"
- ],
- "fan_cooling_layer_time": [
- "5"
- ],
- "filament_density": [
- "1.24"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "11"
- ],
- "nozzle_temperature_initial_layer": [
- "265"
- ],
- "fan_max_speed": [
- "50"
- ],
- "fan_min_speed": [
- "50"
- ],
- "slow_down_min_speed": [
- "20"
- ],
- "slow_down_layer_time": [
- "2"
- ],
- "nozzle_temperature": [
- "270"
- ],
- "temperature_vitrification": [
- "108"
- ],
- "nozzle_temperature_range_low": [
- "260"
- ],
- "nozzle_temperature_range_high": [
- "280"
- ],
- "additional_cooling_fan_speed": [
- "0"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon PA-CF @base",
+ "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..4ab18c24c6
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon PA-CF @base",
+ "name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json
new file mode 100644
index 0000000000..d8c89c7d11
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json
@@ -0,0 +1,82 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+
+ "filament_id": "P510cfd0",
+
+ "filament_settings_id": [
+ "Cubicon PA-CF @base"
+ ],
+
+ "filament_type": [
+ "PA"
+ ],
+
+ "filament_vendor": [
+ "Cubicon"
+ ],
+
+ "inherits": "fdm_filament_pa",
+
+ "is_custom_defined": "0",
+ "name": "Cubicon PA-CF @base",
+ "hot_plate_temp": [
+ "100"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "100"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "fan_cooling_layer_time": [
+ "5"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "10"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "265"
+ ],
+ "fan_max_speed": [
+ "50"
+ ],
+ "fan_min_speed": [
+ "50"
+ ],
+ "slow_down_min_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "2"
+ ],
+ "nozzle_temperature": [
+ "270"
+ ],
+ "temperature_vitrification": [
+ "108"
+ ],
+ "nozzle_temperature_range_low": [
+ "260"
+ ],
+ "nozzle_temperature_range_high": [
+ "280"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json
index 849d03a2fd..2c7620fd08 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,20 +1,13 @@
{
"type": "filament",
- "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_filament_pc",
- "filament_id": "P510cfd0",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PC @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PC"
- ],
- "filament_vendor": [
- "Cubicon"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon PC @base",
+ "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PC @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..0b7e15ded2
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon PC @base",
+ "name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json
new file mode 100644
index 0000000000..dcde4c64de
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json
@@ -0,0 +1,32 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+
+ "filament_id": "P510cfd0",
+
+ "filament_settings_id": [
+ "Cubicon PC @base"
+ ],
+
+ "filament_type": [
+ "PC"
+ ],
+
+ "filament_vendor": [
+ "Cubicon"
+ ],
+
+ "inherits": "fdm_filament_pc",
+
+ "is_custom_defined": "0",
+ "name": "Cubicon PC @base"
+
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json
index c0b1c577e9..a156c688e5 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,71 +1,13 @@
{
"type": "filament",
- "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_filament_pet",
- "filament_id": "P510cfc0",
- "instantiation": "true",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PETG"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "hot_plate_temp": [
- "80"
- ],
- "hot_plate_temp_initial_layer": [
- "80"
- ],
- "close_fan_the_first_x_layers": [
- "3"
- ],
- "fan_cooling_layer_time": [
- "30"
- ],
- "filament_density": [
- "1.24"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "8"
- ],
- "nozzle_temperature_initial_layer": [
- "235"
- ],
- "fan_max_speed": [
- "90"
- ],
- "fan_min_speed": [
- "80"
- ],
- "slow_down_min_speed": [
- "30"
- ],
- "slow_down_layer_time": [
- "8"
- ],
- "nozzle_temperature": [
- "240"
- ],
- "temperature_vitrification": [
- "70"
- ],
- "nozzle_temperature_range_low": [
- "230"
- ],
- "nozzle_temperature_range_high": [
- "250"
- ],
- "additional_cooling_fan_speed": [
- "0"
- ]
-}
\ No newline at end of file
+
+ "inherits": "Cubicon PETG @base",
+ "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PETG @Cubicon xCeler-I 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..d49607abaa
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "inherits": "Cubicon PETG @base",
+ "name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle",
+ "filament_settings_id": ["Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle"]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json
new file mode 100644
index 0000000000..b686ff907f
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json
@@ -0,0 +1,82 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+
+ "filament_id": "P510cfc0",
+
+ "filament_settings_id": [
+ "Cubicon PETG @base"
+ ],
+
+ "filament_type": [
+ "PETG"
+ ],
+
+ "filament_vendor": [
+ "Cubicon"
+ ],
+
+ "inherits": "fdm_filament_pet",
+
+ "is_custom_defined": "0",
+ "name": "Cubicon PETG @base",
+ "hot_plate_temp": [
+ "80"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "80"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "8"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "235"
+ ],
+ "fan_max_speed": [
+ "90"
+ ],
+ "fan_min_speed": [
+ "80"
+ ],
+ "slow_down_min_speed": [
+ "30"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "nozzle_temperature": [
+ "240"
+ ],
+ "temperature_vitrification": [
+ "70"
+ ],
+ "nozzle_temperature_range_low": [
+ "230"
+ ],
+ "nozzle_temperature_range_high": [
+ "250"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json
index 8436718948..667ebbfd1e 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,62 +1,12 @@
{
"type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
"name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_filament_pla",
- "filament_id": "P510cfa0",
- "instantiation": "true",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PLA"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "filament_flow_ratio": [
- "0.99"
- ],
- "filament_max_volumetric_speed": [
- "24.5"
- ],
- "slow_down_layer_time": [
- "3"
- ],
- "slow_down_min_speed": [
- "50"
- ],
- "temperature_vitrification": [
- "60"
- ],
- "hot_plate_temp": [
- "60"
- ],
- "hot_plate_temp_initial_layer": [
- "60"
- ],
- "nozzle_temperature": [
- "210"
- ],
- "nozzle_temperature_initial_layer": [
- "205"
- ],
- "fan_max_speed": [
- "80"
- ],
- "fan_min_speed": [
- "100"
- ],
- "nozzle_temperature_range_low": [
- "190"
- ],
- "nozzle_temperature_range_high": [
- "230"
- ],
- "additional_cooling_fan_speed": [
- "80"
- ]
-}
\ No newline at end of file
+ "inherits": "Cubicon PLA @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..4951caf644
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,12 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
+ "name": "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+ "inherits": "Cubicon PLA @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json
new file mode 100644
index 0000000000..20875d851c
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json
@@ -0,0 +1,68 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
+ "name": "Cubicon PLA @base",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+ "filament_id": "P510cfa0",
+ "filament_settings_id": [
+ "CBC_MTC_0"
+ ],
+ "filament_type": [
+ "PLA"
+ ],
+ "filament_vendor": [
+ "Cubicon"
+ ],
+ "inherits": "fdm_filament_pla",
+ "is_custom_defined": "0",
+ "filament_flow_ratio": [
+ "0.99"
+ ],
+ "filament_max_volumetric_speed": [
+ "23"
+ ],
+ "slow_down_layer_time": [
+ "3"
+ ],
+ "slow_down_min_speed": [
+ "50"
+ ],
+ "temperature_vitrification": [
+ "60"
+ ],
+ "hot_plate_temp": [
+ "60"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "60"
+ ],
+ "nozzle_temperature": [
+ "210"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "205"
+ ],
+ "fan_max_speed": [
+ "80"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "additional_cooling_fan_speed": [
+ "80"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json
index e8c6118e17..370fb6b520 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,26 +1,12 @@
{
"type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
"name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
- "filament_id": "P510cfa1",
- "instantiation": "true",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PLA"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "temperature_vitrification": [
- "52"
- ],
- "nozzle_temperature_range_high": [
- "220"
- ]
-}
\ No newline at end of file
+ "inherits": "Cubicon PLA+ @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..1891392db0
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,12 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
+ "name": "Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+ "inherits": "Cubicon PLA+ @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json
new file mode 100644
index 0000000000..3ad71b3370
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json
@@ -0,0 +1,37 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": [""],
+
+ "filament_id": "P510cfa1",
+
+ "filament_settings_id": [
+ "Cubicon PLA+ @base"
+ ],
+
+ "filament_type": [
+ "PLA"
+ ],
+
+ "filament_vendor": [
+ "Cubicon"
+ ],
+
+ "inherits": "Cubicon PLA @base",
+
+ "is_custom_defined": "0",
+ "name": "Cubicon PLA+ @base",
+ "temperature_vitrification": [
+ "52"
+ ],
+ "nozzle_temperature_range_high": [
+ "220"
+ ]
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json
index da20c5c9d2..c87e99b0ec 100644
--- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,23 +1,12 @@
{
"type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
"name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle",
- "filament_id": "P510cfa2",
- "instantiation": "true",
+
"compatible_printers": [
"Cubicon xCeler-I 0.4 nozzle"
],
- "default_filament_colour": "",
- "filament_settings_id": [
- "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle"
- ],
- "filament_type": [
- "PLA"
- ],
- "filament_vendor": [
- "Cubicon"
- ],
- "temperature_vitrification": [
- "45"
- ]
-}
\ No newline at end of file
+ "inherits": "Cubicon PLAi21 @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..c4dc718209
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,12 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+ "from": "system",
+ "name": "Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle",
+
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+ "inherits": "Cubicon PLAi21 @base"
+}
diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json
new file mode 100644
index 0000000000..bbede501e8
--- /dev/null
+++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json
@@ -0,0 +1,35 @@
+{
+ "type": "filament",
+ "instantiation": "true",
+ "version": "1.0.0.0",
+
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ],
+
+ "default_filament_colour": "",
+
+ "filament_id": "P510cfa2",
+
+ "filament_settings_id": [
+ "Cubicon PLAi21 @base"
+ ],
+
+ "filament_type": [
+ "PLA"
+ ],
+
+ "filament_vendor": [
+ "Cubicon"
+ ],
+
+ "inherits": "Cubicon PLA @base",
+
+ "is_custom_defined": "0",
+ "name": "Cubicon PLAi21 @base",
+ "temperature_vitrification": [
+ "45"
+ ]
+
+}
diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json
index f8f90404b1..07f79da301 100644
--- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json
@@ -2,7 +2,7 @@
"type": "machine",
"name": "Cubicon xCeler-I 0.4 nozzle",
"inherits": "fdm_machine_common",
- "from": "User",
+ "from": "system",
"instantiation": "true",
"adaptive_bed_mesh_margin": "0",
"auxiliary_fan": "1",
@@ -22,9 +22,9 @@
"cooling_tube_length": "0",
"cooling_tube_retraction": "0",
"default_filament_profile": [
- "Cubicon PLA @base"
+ "Cubicon PLA @Cubicon xCeler-I"
],
- "default_print_profile": "0.08mm Extra Fine @Creality K1 (0.4 nozzle)",
+ "default_print_profile": "cubicon default @base",
"deretraction_speed": [
"30"
],
diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json
index b8df593e7d..1b68282f3d 100644
--- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json
+++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json
@@ -4,7 +4,7 @@
"nozzle_diameter": "0.4",
"bed_model": "",
"bed_texture": "Cubicon xCeler-I_bed_texture.svg",
- "family": "Cuibicon",
+ "family": "Cubicon",
"machine_tech": "FFF",
- "default_materials": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle"
+ "default_materials": "Cubicon PLA @Cubicon xCeler-I"
}
\ No newline at end of file
diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..8d9bc54aa5
--- /dev/null
+++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,248 @@
+{
+ "type": "machine",
+ "instantiation": "true",
+ "adaptive_bed_mesh_margin": "0",
+ "auxiliary_fan": "1",
+ "bbl_use_printhost": "0",
+ "bed_custom_model": "",
+ "bed_custom_texture": "",
+ "bed_exclude_area": [
+ "0x0"
+ ],
+ "bed_mesh_max": "99999,99999",
+ "bed_mesh_min": "-99999,-99999",
+ "bed_mesh_probe_distance": "50,50",
+ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
+ "best_object_pos": "0.5,0.5",
+ "change_extrusion_role_gcode": "",
+ "change_filament_gcode": "",
+ "cooling_tube_length": "0",
+ "cooling_tube_retraction": "0",
+ "default_filament_profile": [
+ "Cubicon PLA @Cubicon xCeler-Plus"
+ ],
+ "default_print_profile": "cubicon default @base",
+ "deretraction_speed": [
+ "30"
+ ],
+ "disable_m73": "0",
+ "emit_machine_limits_to_gcode": "1",
+ "enable_filament_ramming": "0",
+ "enable_long_retraction_when_cut": "0",
+ "extra_loading_move": "0",
+ "extruder_clearance_height_to_lid": "140",
+ "extruder_clearance_height_to_rod": "36",
+ "extruder_clearance_radius": "65",
+ "extruder_colour": [
+ "#FCE94F"
+ ],
+ "extruder_offset": [
+ "0x0"
+ ],
+ "fan_kickstart": "0",
+ "fan_speedup_overhangs": "1",
+ "fan_speedup_time": "0",
+ "from": "system",
+ "gcode_flavor": "klipper",
+ "head_wrap_detect_zone": [],
+ "high_current_on_filament_swap": "0",
+ "host_type": "octoprint",
+ "inherits": "fdm_machine_common",
+ "is_custom_defined": "0",
+ "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
+ "long_retractions_when_cut": [
+ "0"
+ ],
+ "machine_end_gcode": "END_PRINT",
+ "machine_load_filament_time": "0",
+ "machine_max_acceleration_e": [
+ "500",
+ "5000"
+ ],
+ "machine_max_acceleration_extruding": [
+ "5000",
+ "20000"
+ ],
+ "machine_max_acceleration_x": [
+ "13000",
+ "20000"
+ ],
+ "machine_max_acceleration_y": [
+ "13000",
+ "20000"
+ ],
+ "machine_max_acceleration_z": [
+ "250",
+ "500"
+ ],
+ "machine_max_speed_z": [
+ "25",
+ "12"
+ ],
+
+ "machine_max_acceleration_retracting": [
+ "5000",
+ "5000"
+ ],
+ "machine_max_acceleration_travel": [
+ "13000",
+ "13000"
+ ],
+
+ "machine_max_jerk_e": [
+ "20",
+ "20"
+ ],
+ "machine_max_jerk_x": [
+ "20",
+ "20"
+ ],
+ "machine_max_jerk_y": [
+ "20",
+ "20"
+ ],
+ "machine_max_jerk_z": [
+ "20",
+ "20"
+ ],
+ "machine_max_junction_deviation": [
+ "0",
+ "0"
+ ],
+ "machine_max_speed_e": [
+ "50",
+ "50"
+ ],
+ "machine_max_speed_x": [
+ "500",
+ "500"
+ ],
+ "machine_max_speed_y": [
+ "500",
+ "500"
+ ],
+ "machine_min_extruding_rate": [
+ "0",
+ "0"
+ ],
+ "machine_min_travel_rate": [
+ "0",
+ "0"
+ ],
+ "machine_pause_gcode": "PAUSE",
+ "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]",
+ "machine_tool_change_time": "0",
+ "machine_unload_filament_time": "0",
+ "manual_filament_change": "0",
+ "max_layer_height": [
+ "0.3"
+ ],
+ "min_layer_height": [
+ "0.1"
+ ],
+ "name": "Cubicon xCeler-Plus 0.4 nozzle",
+ "nozzle_diameter": [
+ "0.4"
+ ],
+ "nozzle_height": "4",
+ "nozzle_hrc": "0",
+ "nozzle_type": "brass",
+ "nozzle_volume": "0",
+ "parking_pos_retraction": "0",
+ "pellet_modded_printer": "0",
+ "preferred_orientation": "0",
+ "print_host": "",
+ "print_host_webui": "",
+ "printable_area": [
+ "0x0",
+ "310x0",
+ "310x310",
+ "0x310"
+ ],
+ "printable_height": "310",
+ "printer_model": "Cubicon xCeler-Plus",
+ "printer_notes": "",
+ "printer_settings_id": "Cubicon xCeler-Plus 0.4 nozzle",
+ "printer_structure": "undefine",
+ "printer_technology": "FFF",
+ "printer_variant": "0.4",
+ "printhost_apikey": "",
+ "printhost_authorization_type": "key",
+ "printhost_cafile": "",
+ "printhost_password": "",
+ "printhost_port": "",
+ "printhost_ssl_ignore_revoke": "0",
+ "printhost_user": "",
+ "printing_by_object_gcode": "",
+ "purge_in_prime_tower": "0",
+ "retract_before_wipe": [
+ "0%"
+ ],
+ "retract_length_toolchange": [
+ "1"
+ ],
+ "retract_lift_above": [
+ "0"
+ ],
+ "retract_lift_below": [
+ "0"
+ ],
+ "retract_lift_enforce": [
+ "All Surfaces"
+ ],
+ "retract_on_top_layer": [
+ "0"
+ ],
+ "retract_restart_extra": [
+ "0"
+ ],
+ "retract_restart_extra_toolchange": [
+ "0"
+ ],
+ "retract_when_changing_layer": [
+ "0"
+ ],
+ "retraction_distances_when_cut": [
+ "18"
+ ],
+ "retraction_length": [
+ "0.8"
+ ],
+ "retraction_minimum_travel": [
+ "1"
+ ],
+ "retraction_speed": [
+ "30"
+ ],
+ "scan_first_layer": "0",
+ "silent_mode": "0",
+ "single_extruder_multi_material": "1",
+ "support_air_filtration": "0",
+ "support_chamber_temp_control": "0",
+ "support_multi_bed_types": "0",
+ "template_custom_gcode": "",
+ "thumbnails": "48x48/PNG, 300x300/PNG",
+ "thumbnails_format": "PNG",
+ "time_cost": "0",
+ "time_lapse_gcode": "",
+ "travel_slope": [
+ "3"
+ ],
+ "upward_compatible_machine": [],
+ "use_firmware_retraction": "0",
+ "use_relative_e_distances": "1",
+ "version": "2.1.1.0",
+ "wipe": [
+ "0"
+ ],
+ "wipe_distance": [
+ "2"
+ ],
+ "z_hop": [
+ "0.2"
+ ],
+ "z_hop_types": [
+ "Normal Lift"
+ ],
+ "z_offset": "0"
+}
diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json
new file mode 100644
index 0000000000..466e159452
--- /dev/null
+++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json
@@ -0,0 +1,10 @@
+{
+ "type": "machine_model",
+ "name": "Cubicon xCeler-Plus",
+ "nozzle_diameter": "0.4",
+ "bed_model": "",
+ "bed_texture": "Cubicon xCeler-I_bed_texture.svg",
+ "family": "Cubicon",
+ "machine_tech": "FFF",
+ "default_materials": "Cubicon PLA @Cubicon xCeler-Plus"
+}
diff --git a/resources/profiles/Cubicon/process/cubicon common @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/process/cubicon common @base.json
similarity index 93%
rename from resources/profiles/Cubicon/process/cubicon common @Cubicon xCeler-I 0.4 nozzle.json
rename to resources/profiles/Cubicon/process/cubicon common @base.json
index 3c6334275f..ad746aaef3 100644
--- a/resources/profiles/Cubicon/process/cubicon common @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/process/cubicon common @base.json
@@ -1,12 +1,14 @@
{
- "type": "process",
- "name": "cubicon common @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_process_common_klipper",
- "instantiation": "false",
+ "version": "1.0.0.0",
+ "instantiation": "false",
"compatible_printers": [
- "Cubicon xCeler-I 0.4 nozzle"
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
],
- "print_settings_id": "cubicon common @Cubicon xCeler-I 0.4 nozzle",
+ "inherits": "fdm_process_common_klipper",
+ "name": "cubicon common @base",
+ "print_settings_id": "cubicon common @base",
+
"accel_to_decel_enable": "1",
"accel_to_decel_factor": "100",
"bridge_angle": "0",
@@ -81,6 +83,7 @@
"top_solid_infill_flow_ratio": "0.9",
"travel_speed": "500",
"support_threshold_angle": "15",
+ "type": "process",
"wall_loops": "2",
"thick_bridges": "0",
"extra_perimeters_on_overhangs": "1",
@@ -107,9 +110,10 @@
"slowdown_for_curled_perimeters": "0",
"bridge_speed": "50",
"internal_bridge_speed": "150%",
+ "is_custom_defined": "0",
"overhang_1_4_speed": "0",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"overhang_4_4_speed": "10",
"independent_support_layer_height": "1"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json
index dd1f422a16..a496d82598 100644
--- a/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-I 0.4 nozzle.json
@@ -1,7 +1,11 @@
{
+ "version": "1.0.0.0",
"type": "process",
- "name": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "cubicon common @Cubicon xCeler-I 0.4 nozzle",
"instantiation": "true",
- "print_settings_id": "cubicon default @Cubicon xCeler-I 0.4 nozzle"
-}
\ No newline at end of file
+ "inherits": "cubicon common @base",
+ "name": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
+ "print_settings_id": "cubicon default @Cubicon xCeler-I 0.4 nozzle",
+ "compatible_printers": [
+ "Cubicon xCeler-I 0.4 nozzle"
+ ]
+}
diff --git a/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-Plus 0.4 nozzle.json
new file mode 100644
index 0000000000..6be1261923
--- /dev/null
+++ b/resources/profiles/Cubicon/process/cubicon default @Cubicon xCeler-Plus 0.4 nozzle.json
@@ -0,0 +1,11 @@
+{
+ "version": "1.0.0.0",
+ "type": "process",
+ "instantiation": "true",
+ "inherits": "cubicon common @base",
+ "name": "cubicon default @Cubicon xCeler-Plus 0.4 nozzle",
+ "print_settings_id": "cubicon default @Cubicon xCeler-Plus 0.4 nozzle",
+ "compatible_printers": [
+ "Cubicon xCeler-Plus 0.4 nozzle"
+ ]
+}
diff --git a/resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/process/process template @base.json
similarity index 97%
rename from resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json
rename to resources/profiles/Cubicon/process/process template @base.json
index 5046b8b8f4..3d076f7895 100644
--- a/resources/profiles/Cubicon/process/process template @Cubicon xCeler-I 0.4 nozzle.json
+++ b/resources/profiles/Cubicon/process/process template @base.json
@@ -1,9 +1,5 @@
{
- "type": "process",
- "name": "process template @Cubicon xCeler-I 0.4 nozzle",
- "inherits": "fdm_process_common_klipper",
- "from": "User",
- "instantiation": "false",
+ "instantiation": "false",
"accel_to_decel_enable": "1",
"accel_to_decel_factor": "50%",
"alternate_extra_wall": "0",
@@ -24,7 +20,8 @@
"brim_width": "5",
"calib_flowrate_topinfill_special_order": "0",
"compatible_printers": [
- "Cubicon xCeler-I 0.4 nozzle"
+ "Cubicon xCeler-I 0.4 nozzle",
+ "Cubicon xCeler-Plus 0.4 nozzle"
],
"compatible_printers_condition": "",
"counterbore_hole_bridging": "none",
@@ -53,6 +50,7 @@
"flush_into_infill": "0",
"flush_into_objects": "0",
"flush_into_support": "1",
+ "from": "User",
"fuzzy_skin": "none",
"fuzzy_skin_first_layer": "0",
"fuzzy_skin_noise_type": "classic",
@@ -77,6 +75,7 @@
"infill_direction": "45",
"infill_jerk": "20",
"infill_wall_overlap": "15%",
+ "inherits": "fdm_process_common_klipper",
"initial_layer_acceleration": "1000",
"initial_layer_infill_speed": "200",
"initial_layer_jerk": "20",
@@ -104,13 +103,14 @@
"internal_solid_infill_line_width": "0.42",
"internal_solid_infill_pattern": "zig-zag",
"internal_solid_infill_speed": "250",
- "ironing_angle": "0",
+ "ironing_angle": "-1",
"ironing_flow": "10%",
"ironing_inset": "0",
"ironing_pattern": "zig-zag",
"ironing_spacing": "0.15",
"ironing_speed": "30",
"ironing_type": "no ironing",
+ "is_custom_defined": "0",
"is_infill_first": "0",
"lattice_angle_1": "-45",
"lattice_angle_2": "45",
@@ -131,6 +131,7 @@
"minimum_sparse_infill_area": "15",
"mmu_segmented_region_interlocking_depth": "0",
"mmu_segmented_region_max_width": "0",
+ "name": "process template @base",
"notes": "",
"only_one_wall_first_layer": "0",
"only_one_wall_top": "1",
@@ -158,7 +159,7 @@
"print_flow_ratio": "1",
"print_order": "default",
"print_sequence": "by layer",
- "print_settings_id": "process template @Cubicon xCeler-I 0.4 nozzle",
+ "print_settings_id": "process template @base",
"raft_contact_distance": "0.1",
"raft_expansion": "1.5",
"raft_first_layer_density": "100%",
@@ -281,6 +282,7 @@
"tree_support_tip_diameter": "0.8",
"tree_support_top_rate": "30%",
"tree_support_wall_count": "0",
+ "version": "1.7.0.2",
"wall_direction": "auto",
"wall_distribution_count": "1",
"wall_filament": "1",
@@ -315,4 +317,4 @@
],
"xy_contour_compensation": "0",
"xy_hole_compensation": "0"
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Geeetech/Geeetech A10 M_cover.png b/resources/profiles/Geeetech/Geeetech A10 M_cover.png
index 537e84e105..c33288671f 100644
Binary files a/resources/profiles/Geeetech/Geeetech A10 M_cover.png and b/resources/profiles/Geeetech/Geeetech A10 M_cover.png differ
diff --git a/resources/profiles/Ginger Additive/ginger G1_cover.png b/resources/profiles/Ginger Additive/Ginger G1_cover.png
similarity index 100%
rename from resources/profiles/Ginger Additive/ginger G1_cover.png
rename to resources/profiles/Ginger Additive/Ginger G1_cover.png
diff --git a/resources/profiles/M3D.json b/resources/profiles/M3D.json
new file mode 100644
index 0000000000..6b77a142df
--- /dev/null
+++ b/resources/profiles/M3D.json
@@ -0,0 +1,37 @@
+{
+ "name": "M3D",
+ "version": "1.0.0",
+ "force_update": "0",
+ "description": "Configuration for M3D printers",
+ "machine_model_list": [
+ {
+ "name": "M3D Enabler D8500 MM Model",
+ "sub_path": "machine/M3D Enabler D8500 MM Model.json"
+ }
+ ],
+ "machine_list": [
+ {
+ "name": "fdm_machine_common",
+ "sub_path": "machine/fdm_machine_common.json"
+ },
+ {
+ "name": "M3D Enabler D8500 MM",
+ "sub_path": "machine/M3D Enabler D8500 MM.json"
+ }
+ ],
+ "process_list": [
+ {
+ "name": "fdm_process_common",
+ "sub_path": "process/fdm_process_common.json"
+ },
+ {
+ "name": "0.15mm MM @D8500",
+ "sub_path": "process/0.15mm MM @D8500.json"
+ },
+ {
+ "name": "0.20mm MM @D8500",
+ "sub_path": "process/0.20mm MM @D8500.json"
+ }
+ ],
+ "filament_list": []
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png b/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png
new file mode 100644
index 0000000000..50020d51b7
Binary files /dev/null and b/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png differ
diff --git a/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json b/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json
new file mode 100644
index 0000000000..1e8c6e9b89
--- /dev/null
+++ b/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json
@@ -0,0 +1,12 @@
+{
+ "type": "machine_model",
+ "name": "M3D Enabler D8500 MM Model",
+ "model_id": "M3D_D8500_MM",
+ "family": "M3D",
+ "machine_tech": "FFF",
+ "nozzle_diameter": "0.4",
+ "bed_model": "model/M3D_bed_model.stl",
+ "bed_texture": "model/M3D_bed_texture.png",
+ "default_materials": "Generic PLA @system",
+ "scan_folder": "1"
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/machine/M3D Enabler D8500 MM.json b/resources/profiles/M3D/machine/M3D Enabler D8500 MM.json
new file mode 100644
index 0000000000..2bcfbfcdae
--- /dev/null
+++ b/resources/profiles/M3D/machine/M3D Enabler D8500 MM.json
@@ -0,0 +1,166 @@
+{
+ "type": "machine",
+ "name": "M3D Enabler D8500 MM",
+ "printer_model": "M3D Enabler D8500 MM Model",
+ "printer_variant": "0.4",
+ "inherits": "fdm_machine_common",
+ "from": "system",
+ "instantiation": "true",
+ "is_custom_defined": "0",
+ "setting_id": "M3D_D8500_MM_04",
+ "version": "1.0.0",
+
+ "auxiliary_fan": "1",
+ "change_filament_gcode": "M18 E",
+ "deretraction_speed": [
+ "50",
+ "50"
+ ],
+ "extruder_clearance_height_to_rod": "19",
+ "extruder_clearance_radius": "100",
+ "extruder_colour": [
+ "#FCE94F",
+ "#FCE94F"
+ ],
+ "extruder_offset": [
+ "0x0",
+ "0x0"
+ ],
+ "fan_speedup_time": "1",
+ "host_type": "esp3d",
+ "long_retractions_when_cut": [
+ "0",
+ "0"
+ ],
+ "machine_end_gcode": "; ===== ORCA END GCODE =====\nM400\nM83\nG92 E0\nG1 E-17 F1800 ; retract BEFORE any moves or power changes\n\n; Now lift and park\nG91\nG1 Z2 F2000\nG90\nG1 X100 Y160 F3000 ; parking point\n\n; Power down in order\nM104 T0 S0\nM104 T1 S0\nM106 S50 ; keep fan at ~50% while cooling (adjust if desired)\n; (Leave steppers on by omitting M84)\n; ===== END ORCA END GCODE =====\n",
+ "machine_load_filament_time": "0.5",
+ "machine_max_acceleration_e": [
+ "10000",
+ "10000"
+ ],
+ "machine_max_acceleration_x": [
+ "2000",
+ "2000"
+ ],
+ "machine_max_acceleration_y": [
+ "2000",
+ "2000"
+ ],
+ "machine_max_acceleration_z": [
+ "400",
+ "400"
+ ],
+ "machine_max_speed_e": [
+ "30",
+ "30"
+ ],
+ "machine_max_speed_x": [
+ "400",
+ "400"
+ ],
+ "machine_max_speed_y": [
+ "300",
+ "300"
+ ],
+ "machine_max_speed_z": [
+ "12",
+ "12"
+ ],
+ "machine_start_gcode": "; ===== ORCA START GCODE =====\n; minx:{first_layer_print_min[0]}\n; miny:{first_layer_print_min[1]}\n; maxx:{first_layer_print_max[0]}\n; maxy:{first_layer_print_max[1]}\n; used_0:{is_extruder_used[0]}\n; used_1:{is_extruder_used[1]}\n\n; Heaters\n{if is_extruder_used[0]}M104 T0 S{first_layer_temperature[0]}{endif}\n{if !is_extruder_used[0]}M104 T0 S150{endif}\n{if is_extruder_used[1]}M104 T1 S{first_layer_temperature[1]}{endif}\n{if !is_extruder_used[1]}M104 T1 S150{endif}\nM140 S0\nM106 S50\n\n; Home and clearance\nG28 X Y\nG28 Z\nG91\nG1 Z10 F1200 ; lift 10mm\nG90\n\n; Bed wait (dummy)\nM190 S0\n\n; Wait for target temps\n{if is_extruder_used[0]}M109 T0 S{first_layer_temperature[0]}{endif}\n{if is_extruder_used[1]}M109 T1 S{first_layer_temperature[1]}{endif}\n\n; Absolute XYZ / Relative E\nG90\nM83\n\n; ===== Dynamic Bed Leveling ====\nT0\nG1 Z3 F3000\nG1 X15 Y15 F6000\nG1 Z0.25 F1000; Otherwise Orca displays with a 3mm height\n; Single probe touch\nG30\nM420 S1\n; Bias the contact as -0.25 and fix Z-zero\nG92 Z-0.25 ; probed contact now treated as Z = -0.25\nG1 Z0.3 F300\n\n; ===== PRIME / TWO-LINE WIPES (sparse, no air extrude) =====\n\n; --- Tool 0: lines at Y=5 and Y=6 ---\n{if is_extruder_used[0]}\nT0\nG92 E0\nG1 X20 Y5 F3000\nG1 Z0.30 F600\nG1 X180 E18 F700\nG1 Y6.0 F1200\nG1 X20 E18 F700\nG92 E0\n{endif}\n\n; --- Tool 1: lines at Y=7 and Y=8 ---\n{if is_extruder_used[1]}\nT1\nG92 E0\nG1 X20 Y7 F3000\nG1 Z0.30 F600\nG1 X180 E18 F700\nG1 Y8.0 F1200\nG1 X20 E18 F700\nG92 E0\n{endif}\n\n; Activate initial tool (no retracts; Orca starts immediately)\nT{initial_extruder}\nG92 E0\n; ===== END ORCA START GCODE =====\n",
+ "machine_tool_change_time": "0.5",
+ "machine_unload_filament_time": "0.5",
+ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0",
+ "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
+ "machine_pause_gcode": "M601",
+ "max_layer_height": [
+ "0.32",
+ "0.32"
+ ],
+ "min_layer_height": [
+ "0.1",
+ "0.1"
+ ],
+ "nozzle_diameter": [
+ "0.4",
+ "0.4"
+ ],
+ "nozzle_type": "brass",
+ "print_host": "m3d-enabler.local",
+ "printable_area": [
+ "0x0",
+ "210x0",
+ "210x150",
+ "0x150"
+ ],
+ "printer_settings_id": "M3D Enabler D8500 MM",
+ "retract_before_wipe": [
+ "100%",
+ "100%"
+ ],
+ "retract_length_toolchange": [
+ "17",
+ "17"
+ ],
+ "retract_lift_above": [
+ "0",
+ "0"
+ ],
+ "retract_lift_below": [
+ "0",
+ "0"
+ ],
+ "retract_lift_enforce": [
+ "All Surfaces",
+ "All Surfaces"
+ ],
+ "retract_restart_extra": [
+ "0",
+ "0"
+ ],
+ "retract_restart_extra_toolchange": [
+ "0",
+ "0"
+ ],
+ "retract_when_changing_layer": [
+ "1",
+ "1"
+ ],
+ "retraction_distances_when_cut": [
+ "18",
+ "18"
+ ],
+ "retraction_length": [
+ "4.5",
+ "4.5"
+ ],
+ "retraction_minimum_travel": [
+ "2.5",
+ "2.5"
+ ],
+ "retraction_speed": [
+ "60",
+ "60"
+ ],
+ "single_extruder_multi_material": "0",
+ "thumbnails": "120x60/PNG",
+ "travel_slope": [
+ "45",
+ "45"
+ ],
+ "wipe": [
+ "1",
+ "1"
+ ],
+ "wipe_distance": [
+ "2",
+ "2"
+ ],
+ "z_hop": [
+ "0",
+ "0"
+ ],
+ "z_hop_types": [
+ "Normal Lift",
+ "Normal Lift"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/machine/fdm_machine_common.json b/resources/profiles/M3D/machine/fdm_machine_common.json
new file mode 100644
index 0000000000..9132e65373
--- /dev/null
+++ b/resources/profiles/M3D/machine/fdm_machine_common.json
@@ -0,0 +1,126 @@
+{
+ "type": "machine",
+ "name": "fdm_machine_common",
+ "from": "system",
+ "instantiation": "false",
+ "printer_technology": "FFF",
+ "printer_settings_id": "fdm_machine_common",
+ "version": "1.0.0.0",
+ "nozzle_diameter": [
+ "0.4"
+ ],
+ "printable_area": [
+ "0x0",
+ "210x0",
+ "210x150",
+ "0x150"
+ ],
+ "thumbnails": [
+ "16x16"
+ ],
+ "auxiliary_fan": "1",
+ "change_filament_gcode": "M18 E",
+ "deretraction_speed": [
+ "50"
+ ],
+ "extruder_clearance_height_to_rod": "19",
+ "extruder_clearance_radius": "100",
+ "extruder_colour": [
+ "#FCE94F"
+ ],
+ "extruder_offset": [
+ "0x0"
+ ],
+ "fan_speedup_time": "1",
+ "host_type": "esp3d",
+ "long_retractions_when_cut": [
+ "0"
+ ],
+ "machine_end_gcode": "; ===== ORCA END GCODE =====\nM400\nM83\nG92 E0\nG1 E-17 F1800 ; retract BEFORE any moves or power changes\n\n; Now lift and park\nG91\nG1 Z2 F2000\nG90\nG1 X100 Y160 F3000 ; parking point\n\n; Power down in order\nM104 T0 S0\nM104 T1 S0\nM106 S50 ; keep fan at ~50% while cooling (adjust if desired)\n; (Leave steppers on by omitting M84)\n; ===== END ORCA END GCODE =====\n",
+ "machine_load_filament_time": "0.5",
+ "machine_max_acceleration_e": [
+ "10000"
+ ],
+ "machine_max_acceleration_x": [
+ "2000"
+ ],
+ "machine_max_acceleration_y": [
+ "2000"
+ ],
+ "machine_max_acceleration_z": [
+ "400"
+ ],
+ "machine_max_speed_e": [
+ "30"
+ ],
+ "machine_max_speed_x": [
+ "400"
+ ],
+ "machine_max_speed_y": [
+ "300"
+ ],
+ "machine_max_speed_z": [
+ "12"
+ ],
+ "machine_start_gcode": "; ===== ORCA START GCODE =====\n; minx:{first_layer_print_min[0]}\n; miny:{first_layer_print_min[1]}\n; maxx:{first_layer_print_max[0]}\n; maxy:{first_layer_print_max[1]}\n; used_0:{is_extruder_used[0]}\n; used_1:{is_extruder_used[1]}\n\n; Heaters\n{if is_extruder_used[0]}M104 T0 S{first_layer_temperature[0]}{endif}\n{if !is_extruder_used[0]}M104 T0 S150{endif}\n{if is_extruder_used[1]}M104 T1 S{first_layer_temperature[1]}{endif}\n{if !is_extruder_used[1]}M104 T1 S150{endif}\nM140 S0\nM106 S50\n\n; Home and clearance\nG28 X Y\nG28 Z\nG91\nG1 Z10 F1200 ; lift 10mm\nG90\n\n; Bed wait (dummy)\nM190 S0\n\n; Wait for target temps\n{if is_extruder_used[0]}M109 T0 S{first_layer_temperature[0]}{endif}\n{if is_extruder_used[1]}M109 T1 S{first_layer_temperature[1]}{endif}\n\n; Absolute XYZ / Relative E\nG90\nM83\n\n; ===== Dynamic Bed Leveling ====\nT0\nG1 Z3 F3000\nG1 X15 Y15 F6000\nG1 Z0.25 F1000; Otherwise Orca displays with a 3mm height\n; Single probe touch\nG30\nM420 S1\n; Bias the contact as -0.25 and fix Z-zero\nG92 Z-0.25 ; probed contact now treated as Z = -0.25\nG1 Z0.3 F300\n\n; ===== PRIME / TWO-LINE WIPES (sparse, no air extrude) =====\n\n; --- Tool 0: lines at Y=5 and Y=6 ---\n{if is_extruder_used[0]}\nT0\nG92 E0\nG1 X20 Y5 F3000\nG1 Z0.30 F600\nG1 X180 E18 F700\nG1 Y6.0 F1200\nG1 X20 E18 F700\nG92 E0\n{endif}\n\n; --- Tool 1: lines at Y=7 and Y=8 ---\n{if is_extruder_used[1]}\nT1\nG92 E0\nG1 X20 Y7 F3000\nG1 Z0.30 F600\nG1 X180 E18 F700\nG1 Y8.0 F1200\nG1 X20 E18 F700\nG92 E0\n{endif}\n\n; Activate initial tool (no retracts; Orca starts immediately)\nT{initial_extruder}\nG92 E0\n; ===== END ORCA START GCODE =====\n",
+ "machine_tool_change_time": "0.5",
+ "machine_unload_filament_time": "0.5",
+ "max_layer_height": [
+ "0.32"
+ ],
+ "min_layer_height": [
+ "0.1"
+ ],
+ "retract_before_wipe": [
+ "100%"
+ ],
+ "retract_length_toolchange": [
+ "17"
+ ],
+ "retract_lift_above": [
+ "0"
+ ],
+ "retract_lift_below": [
+ "0"
+ ],
+ "retract_lift_enforce": [
+ "All Surfaces"
+ ],
+ "retract_restart_extra": [
+ "0"
+ ],
+ "retract_restart_extra_toolchange": [
+ "0"
+ ],
+ "retract_when_changing_layer": [
+ "1"
+ ],
+ "retraction_distances_when_cut": [
+ "18"
+ ],
+ "retraction_length": [
+ "4.5"
+ ],
+ "retraction_minimum_travel": [
+ "2.5"
+ ],
+ "retraction_speed": [
+ "60"
+ ],
+ "single_extruder_multi_material": "0",
+ "travel_slope": [
+ "45"
+ ],
+ "wipe": [
+ "1"
+ ],
+ "wipe_distance": [
+ "2"
+ ],
+ "z_hop": [
+ "0"
+ ],
+ "z_hop_types": [
+ "Normal Lift"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/model/M3D_bed_model.stl b/resources/profiles/M3D/model/M3D_bed_model.stl
new file mode 100644
index 0000000000..8ed24335dd
Binary files /dev/null and b/resources/profiles/M3D/model/M3D_bed_model.stl differ
diff --git a/resources/profiles/M3D/model/M3D_bed_texture.png b/resources/profiles/M3D/model/M3D_bed_texture.png
new file mode 100644
index 0000000000..bd0e6b8b80
Binary files /dev/null and b/resources/profiles/M3D/model/M3D_bed_texture.png differ
diff --git a/resources/profiles/M3D/process/0.15mm MM @D8500.json b/resources/profiles/M3D/process/0.15mm MM @D8500.json
new file mode 100644
index 0000000000..ada09ff7ab
--- /dev/null
+++ b/resources/profiles/M3D/process/0.15mm MM @D8500.json
@@ -0,0 +1,45 @@
+{
+ "type": "process",
+ "name": "0.15mm MM @D8500",
+ "inherits": "fdm_process_common",
+ "from": "system",
+ "instantiation": "true",
+ "compatible_printers": [
+ "M3D Enabler D8500 MM"
+ ],
+ "brim_type": "no_brim",
+ "support_object_first_layer_gap": "1",
+ "support_object_xy_distance": "0.5",
+ "bridge_acceleration": "50%",
+ "default_acceleration": "1000",
+ "initial_layer_acceleration": "500",
+ "inner_wall_acceleration": "1000",
+ "internal_solid_infill_acceleration": "100%",
+ "outer_wall_acceleration": "1000",
+ "sparse_infill_acceleration": "100%",
+ "top_surface_acceleration": "1000",
+ "travel_acceleration": "1000",
+ "enable_overhang_speed": "1",
+ "enable_prime_tower": "1",
+ "enable_support": "1",
+ "filename_format": "{input_filename_base}_{print_time}.gcode",
+ "gap_infill_speed": "60",
+ "initial_layer_speed": "35",
+ "inner_wall_line_width": "0.4",
+ "inner_wall_speed": "90",
+ "internal_solid_infill_speed": "60",
+ "layer_height": "0.15",
+ "outer_wall_speed": "45",
+ "prime_tower_brim_width": "1",
+ "prime_tower_width": "40",
+ "prime_volume": "30",
+ "slow_down_layers": "1",
+ "sparse_infill_density": "5%",
+ "sparse_infill_speed": "60",
+ "support_interface_speed": "30",
+ "support_type": "normal(manual)",
+ "travel_speed": "100",
+ "wall_loops": "2",
+ "wipe_tower_extra_spacing": "200%",
+ "wipe_tower_filament": "2"
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/process/0.20mm MM @D8500.json b/resources/profiles/M3D/process/0.20mm MM @D8500.json
new file mode 100644
index 0000000000..a2e2bd5a6a
--- /dev/null
+++ b/resources/profiles/M3D/process/0.20mm MM @D8500.json
@@ -0,0 +1,46 @@
+{
+ "type": "process",
+ "name": "0.20mm MM @D8500",
+ "inherits": "fdm_process_common",
+ "from": "system",
+ "instantiation": "true",
+ "compatible_printers": [
+ "M3D Enabler D8500 MM"
+ ],
+ "brim_type": "no_brim",
+ "support_object_first_layer_gap": "1",
+ "support_object_xy_distance": "0.5",
+ "bridge_acceleration": "50%",
+ "default_acceleration": "1000",
+ "initial_layer_acceleration": "500",
+ "inner_wall_acceleration": "1000",
+ "internal_solid_infill_acceleration": "100%",
+ "outer_wall_acceleration": "1000",
+ "sparse_infill_acceleration": "100%",
+ "top_surface_acceleration": "1000",
+ "travel_acceleration": "1000",
+ "enable_overhang_speed": "1",
+ "enable_prime_tower": "1",
+ "enable_support": "1",
+ "filename_format": "{input_filename_base}_{print_time}.gcode",
+ "gap_infill_speed": "60",
+ "initial_layer_speed": "35",
+ "inner_wall_line_width": "0.4",
+ "inner_wall_speed": "90",
+ "internal_solid_infill_speed": "60",
+ "layer_height": "0.2",
+ "outer_wall_speed": "45",
+ "prime_tower_brim_width": "1",
+ "prime_tower_width": "40",
+ "prime_volume": "30",
+ "slow_down_layers": "1",
+ "sparse_infill_density": "5%",
+ "sparse_infill_speed": "60",
+ "support_interface_speed": "30",
+ "support_type": "normal(manual)",
+ "top_surface_speed": "40",
+ "travel_speed": "100",
+ "wall_loops": "2",
+ "wipe_tower_extra_spacing": "200%",
+ "wipe_tower_filament": "2"
+}
\ No newline at end of file
diff --git a/resources/profiles/M3D/process/fdm_process_common.json b/resources/profiles/M3D/process/fdm_process_common.json
new file mode 100644
index 0000000000..ac39c20dde
--- /dev/null
+++ b/resources/profiles/M3D/process/fdm_process_common.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_common",
+ "from": "system",
+ "instantiation": "false",
+ "brim_type": "no_brim",
+ "enable_overhang_speed": "0",
+ "enable_prime_tower": "1",
+ "enable_support": "1",
+ "filename_format": "{input_filename_base}_{print_time}.gcode",
+ "gap_infill_speed": "60",
+ "initial_layer_speed": "35",
+ "inner_wall_line_width": "0.4",
+ "inner_wall_speed": "90",
+ "internal_solid_infill_speed": "60",
+ "outer_wall_speed": "45",
+ "prime_tower_brim_width": "1",
+ "prime_tower_width": "40",
+ "prime_volume": "30",
+ "slow_down_layers": "1",
+ "sparse_infill_density": "5%",
+ "sparse_infill_speed": "60",
+ "support_interface_speed": "30",
+ "support_type": "normal(manual)",
+ "top_surface_speed": "40",
+ "travel_speed": "100",
+ "wall_loops": "2",
+ "wipe_tower_extra_spacing": "200%",
+ "wipe_tower_filament": "2"
+}
\ No newline at end of file
diff --git a/resources/profiles/MagicMaker/MM hj sk_cover.png b/resources/profiles/MagicMaker/MM hj SK_cover.png
similarity index 100%
rename from resources/profiles/MagicMaker/MM hj sk_cover.png
rename to resources/profiles/MagicMaker/MM hj SK_cover.png
diff --git a/resources/profiles/OpenEYE.json b/resources/profiles/OpenEYE.json
new file mode 100644
index 0000000000..b3bd6496dd
--- /dev/null
+++ b/resources/profiles/OpenEYE.json
@@ -0,0 +1,198 @@
+{
+ "name": "OpenEYE",
+ "url": "http://www.openeye.tech",
+ "version": "01.00.00.03",
+ "force_update": "0",
+ "description": "OpenEYE Printers Configurations",
+ "machine_model_list": [
+ {
+ "name": "OpenEYE Peacock V2",
+ "sub_path": "machine/OpenEYE Peacock V2.json"
+ }
+ ],
+ "process_list": [
+ {
+ "name": "fdm_process_common",
+ "sub_path": "process/fdm_process_common.json"
+ },
+ {
+ "name": "fdm_process_openeye_common",
+ "sub_path": "process/fdm_process_openeye_common.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.06_nozzle_0.2",
+ "sub_path": "process/fdm_process_openeye_0.06_nozzle_0.2.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.08_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.08_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.08_nozzle_0.2",
+ "sub_path": "process/fdm_process_openeye_0.08_nozzle_0.2.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.10_nozzle_0.2",
+ "sub_path": "process/fdm_process_openeye_0.10_nozzle_0.2.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.12_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.12_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.12_nozzle_0.2",
+ "sub_path": "process/fdm_process_openeye_0.12_nozzle_0.2.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.14_nozzle_0.2",
+ "sub_path": "process/fdm_process_openeye_0.14_nozzle_0.2.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.16_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.16_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.18_nozzle_0.6",
+ "sub_path": "process/fdm_process_openeye_0.18_nozzle_0.6.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.20_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.20_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.24_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.24_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.24_nozzle_0.6",
+ "sub_path": "process/fdm_process_openeye_0.24_nozzle_0.6.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.24_nozzle_0.8",
+ "sub_path": "process/fdm_process_openeye_0.24_nozzle_0.8.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.28_nozzle_0.4",
+ "sub_path": "process/fdm_process_openeye_0.28_nozzle_0.4.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.30_nozzle_0.6",
+ "sub_path": "process/fdm_process_openeye_0.30_nozzle_0.6.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.32_nozzle_0.8",
+ "sub_path": "process/fdm_process_openeye_0.32_nozzle_0.8.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.36_nozzle_0.6",
+ "sub_path": "process/fdm_process_openeye_0.36_nozzle_0.6.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.40_nozzle_0.8",
+ "sub_path": "process/fdm_process_openeye_0.40_nozzle_0.8.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.42_nozzle_0.6",
+ "sub_path": "process/fdm_process_openeye_0.42_nozzle_0.6.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.48_nozzle_0.8",
+ "sub_path": "process/fdm_process_openeye_0.48_nozzle_0.8.json"
+ },
+ {
+ "name": "fdm_process_openeye_0.56_nozzle_0.8",
+ "sub_path": "process/fdm_process_openeye_0.56_nozzle_0.8.json"
+ },
+ {
+ "name": "0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle",
+ "sub_path": "process/0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle.json"
+ },
+ {
+ "name": "0.08mm Extra Fine @OpenEYE Peacock V2",
+ "sub_path": "process/0.08mm Extra Fine @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle",
+ "sub_path": "process/0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle.json"
+ },
+ {
+ "name": "0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle",
+ "sub_path": "process/0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle.json"
+ },
+ {
+ "name": "0.12mm Fine @OpenEYE Peacock V2",
+ "sub_path": "process/0.12mm Fine @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.16mm Balanced Quality @OpenEYE Peacock V2",
+ "sub_path": "process/0.16mm Balanced Quality @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.16mm Standard @OpenEYE Peacock V2",
+ "sub_path": "process/0.16mm Standard @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle",
+ "sub_path": "process/0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle.json"
+ },
+ {
+ "name": "0.20mm Balanced Strength @OpenEYE Peacock V2",
+ "sub_path": "process/0.20mm Balanced Strength @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.20mm Standard @OpenEYE Peacock V2",
+ "sub_path": "process/0.20mm Standard @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle",
+ "sub_path": "process/0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle.json"
+ },
+ {
+ "name": "0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle",
+ "sub_path": "process/0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle.json"
+ },
+ {
+ "name": "0.24mm Standard @OpenEYE Peacock V2",
+ "sub_path": "process/0.24mm Standard @OpenEYE Peacock V2.json"
+ },
+ {
+ "name": "0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle",
+ "sub_path": "process/0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle.json"
+ },
+ {
+ "name": "0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle",
+ "sub_path": "process/0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle.json"
+ },
+ {
+ "name": "0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle",
+ "sub_path": "process/0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle.json"
+ }
+ ],
+ "filament_list": [],
+ "machine_list": [
+ {
+ "name": "fdm_machine_common",
+ "sub_path": "machine/fdm_machine_common.json"
+ },
+ {
+ "name": "fdm_openeye_common",
+ "sub_path": "machine/fdm_openeye_common.json"
+ },
+ {
+ "name": "OpenEYE Peacock V2 0.4 nozzle",
+ "sub_path": "machine/OpenEYE Peacock V2 0.4 nozzle.json"
+ },
+ {
+ "name": "OpenEYE Peacock V2 0.2 nozzle",
+ "sub_path": "machine/OpenEYE Peacock V2 0.2 nozzle.json"
+ },
+ {
+ "name": "OpenEYE Peacock V2 0.6 nozzle",
+ "sub_path": "machine/OpenEYE Peacock V2 0.6 nozzle.json"
+ },
+ {
+ "name": "OpenEYE Peacock V2 0.8 nozzle",
+ "sub_path": "machine/OpenEYE Peacock V2 0.8 nozzle.json"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/OpenEYE Peacock V2_cover.png b/resources/profiles/OpenEYE/OpenEYE Peacock V2_cover.png
new file mode 100644
index 0000000000..394f42c693
Binary files /dev/null and b/resources/profiles/OpenEYE/OpenEYE Peacock V2_cover.png differ
diff --git a/resources/profiles/OpenEYE/Plate.stl b/resources/profiles/OpenEYE/Plate.stl
new file mode 100644
index 0000000000..c57b67b0aa
Binary files /dev/null and b/resources/profiles/OpenEYE/Plate.stl differ
diff --git a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.2 nozzle.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.2 nozzle.json
new file mode 100644
index 0000000000..1c427d38c2
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.2 nozzle.json
@@ -0,0 +1,24 @@
+{
+ "type": "machine",
+ "name": "OpenEYE Peacock V2 0.2 nozzle",
+ "inherits": "OpenEYE Peacock V2 0.4 nozzle",
+ "from": "system",
+ "setting_id": "GM002",
+ "instantiation": "true",
+ "nozzle_diameter": [
+ "0.2"
+ ],
+ "printer_model": "OpenEYE Peacock V2",
+ "printer_variant": "0.2",
+ "default_print_profile": "0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle",
+ "default_bed_type": "Textured PEI Plate",
+ "max_layer_height": [
+ "0.14"
+ ],
+ "min_layer_height": [
+ "0.04"
+ ],
+ "retraction_length": [
+ "0.4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json
new file mode 100644
index 0000000000..2912a51b45
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json
@@ -0,0 +1,51 @@
+{
+ "default_print_profile": "0.20mm Standard @OpenEYE Peacock V2",
+ "default_bed_type": "Textured PEI Plate",
+ "from": "system",
+ "inherits": "fdm_openeye_common",
+ "instantiation": "true",
+ "adaptive_bed_mesh_margin": "10",
+ "bed_mesh_max": "211,211",
+ "bed_mesh_min": "1.5,7",
+ "layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}\n_MMU_UPDATE_HEIGHT",
+ "machine_end_gcode": "MMU_END\nEND_PRINT",
+ "machine_load_filament_time": "30",
+ "machine_max_speed_e": [
+ "60",
+ "60"
+ ],
+ "machine_max_speed_x": [
+ "500",
+ "500"
+ ],
+ "machine_max_speed_y": [
+ "500",
+ "500"
+ ],
+ "machine_max_speed_z": [
+ "30",
+ "30"
+ ],
+ "machine_pause_gcode": "PAUSE",
+ "machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\" MESH_MIN={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} MESH_MAX={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE_MARGIN={adaptive_bed_mesh_margin}\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
+ "machine_unload_filament_time": "30",
+ "name": "OpenEYE Peacock V2 0.4 nozzle",
+ "nozzle_diameter": [
+ "0.4"
+ ],
+ "printable_area": [
+ "1.5x7",
+ "235x7",
+ "235x235",
+ "1.5x235"
+ ],
+ "printable_height": "200",
+ "printer_model": "OpenEYE Peacock V2",
+ "printer_variant": "0.4",
+ "retract_lift_below": [
+ "180",
+ "180"
+ ],
+ "setting_id": "GM001",
+ "type": "machine"
+}
diff --git a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.6 nozzle.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.6 nozzle.json
new file mode 100644
index 0000000000..aa78fa17ab
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.6 nozzle.json
@@ -0,0 +1,24 @@
+{
+ "type": "machine",
+ "name": "OpenEYE Peacock V2 0.6 nozzle",
+ "inherits": "OpenEYE Peacock V2 0.4 nozzle",
+ "from": "system",
+ "setting_id": "GM003",
+ "instantiation": "true",
+ "nozzle_diameter": [
+ "0.6"
+ ],
+ "printer_model": "OpenEYE Peacock V2",
+ "printer_variant": "0.6",
+ "default_print_profile": "0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle",
+ "default_bed_type": "Textured PEI Plate",
+ "max_layer_height": [
+ "0.42"
+ ],
+ "min_layer_height": [
+ "0.12"
+ ],
+ "retraction_length": [
+ "1.4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.8 nozzle.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.8 nozzle.json
new file mode 100644
index 0000000000..ef5c46aed3
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.8 nozzle.json
@@ -0,0 +1,24 @@
+{
+ "type": "machine",
+ "name": "OpenEYE Peacock V2 0.8 nozzle",
+ "inherits": "OpenEYE Peacock V2 0.4 nozzle",
+ "from": "system",
+ "setting_id": "GM004",
+ "instantiation": "true",
+ "nozzle_diameter": [
+ "0.8"
+ ],
+ "printer_model": "OpenEYE Peacock V2",
+ "printer_variant": "0.8",
+ "default_print_profile": "0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle",
+ "default_bed_type": "Textured PEI Plate",
+ "max_layer_height": [
+ "0.56"
+ ],
+ "min_layer_height": [
+ "0.16"
+ ],
+ "retraction_length": [
+ "3"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..44b78a7450
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2.json
@@ -0,0 +1,13 @@
+{
+ "type": "machine_model",
+ "name": "OpenEYE Peacock V2",
+ "nozzle_diameter": "0.4;0.2;0.6;0.8",
+ "url": "http://www.openeye.tech",
+ "bed_model": "Plate.stl",
+ "bed_texture": "pei.png",
+ "default_bed_type": "Textured PEI Plate",
+ "family": "OpenEYE",
+ "machine_tech": "FFF",
+ "model_id": "openeye_01",
+ "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/OpenEYE/machine/fdm_machine_common.json b/resources/profiles/OpenEYE/machine/fdm_machine_common.json
new file mode 100644
index 0000000000..7a32c1630a
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/fdm_machine_common.json
@@ -0,0 +1,121 @@
+{
+ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
+ "best_object_pos": "0.5x0.5",
+ "change_filament_gcode": "",
+ "default_filament_profile": [],
+ "default_print_profile": "",
+ "deretraction_speed": [
+ "40"
+ ],
+ "extruder_clearance_height_to_lid": "140",
+ "extruder_clearance_height_to_rod": "34",
+ "extruder_clearance_radius": "65",
+ "extruder_colour": [
+ "#FCE94F"
+ ],
+ "extruder_offset": [
+ "0x0"
+ ],
+ "from": "system",
+ "gcode_flavor": "marlin",
+ "instantiation": "false",
+ "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
+ "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
+ "machine_max_acceleration_e": [
+ "5000"
+ ],
+ "machine_max_acceleration_extruding": [
+ "10000"
+ ],
+ "machine_max_acceleration_retracting": [
+ "1000"
+ ],
+ "machine_max_acceleration_x": [
+ "10000"
+ ],
+ "machine_max_acceleration_y": [
+ "10000"
+ ],
+ "machine_max_acceleration_z": [
+ "100"
+ ],
+ "machine_max_jerk_e": [
+ "5"
+ ],
+ "machine_max_jerk_x": [
+ "8"
+ ],
+ "machine_max_jerk_y": [
+ "8"
+ ],
+ "machine_max_jerk_z": [
+ "3"
+ ],
+ "machine_max_speed_e": [
+ "60"
+ ],
+ "machine_max_speed_x": [
+ "500"
+ ],
+ "machine_max_speed_y": [
+ "500"
+ ],
+ "machine_max_speed_z": [
+ "10"
+ ],
+ "machine_min_extruding_rate": [
+ "0"
+ ],
+ "machine_min_travel_rate": [
+ "0"
+ ],
+ "machine_pause_gcode": "M601",
+ "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
+ "max_layer_height": [
+ "0.28"
+ ],
+ "min_layer_height": [
+ "0.08"
+ ],
+ "name": "fdm_machine_common",
+ "nozzle_diameter": [
+ "0.4"
+ ],
+ "printable_height": "250",
+ "printer_settings_id": "",
+ "printer_technology": "FFF",
+ "printer_variant": "0.4",
+ "retract_before_wipe": [
+ "70%"
+ ],
+ "retract_length_toolchange": [
+ "1"
+ ],
+ "retract_restart_extra": [
+ "0"
+ ],
+ "retract_restart_extra_toolchange": [
+ "0"
+ ],
+ "retract_when_changing_layer": [
+ "1"
+ ],
+ "retraction_length": [
+ "5"
+ ],
+ "retraction_minimum_travel": [
+ "2"
+ ],
+ "retraction_speed": [
+ "60"
+ ],
+ "silent_mode": "0",
+ "single_extruder_multi_material": "1",
+ "type": "machine",
+ "wipe": [
+ "1"
+ ],
+ "z_hop": [
+ "0"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/machine/fdm_openeye_common.json b/resources/profiles/OpenEYE/machine/fdm_openeye_common.json
new file mode 100644
index 0000000000..a428532958
--- /dev/null
+++ b/resources/profiles/OpenEYE/machine/fdm_openeye_common.json
@@ -0,0 +1,226 @@
+{
+ "adaptive_bed_mesh_margin": "0",
+ "auxiliary_fan": "0",
+ "bed_exclude_area": [
+ "0x0"
+ ],
+ "bed_mesh_max": "99999,99999",
+ "bed_mesh_min": "-99999,-99999",
+ "bed_mesh_probe_distance": "50,50",
+ "bed_temperature_formula": "by_highest_temp",
+ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME",
+ "best_object_pos": "0.5,0.5",
+ "change_filament_gcode": "",
+ "cooling_tube_length": "0",
+ "cooling_tube_retraction": "0",
+ "default_bed_type": "Textured PEI Plate",
+ "default_filament_profile": [
+ "Generic PLA @System"
+ ],
+ "default_print_profile": "0.20mm Standard @OpenEYE Peacock V2",
+ "deretraction_speed": [
+ "30"
+ ],
+ "disable_m73": "0",
+ "emit_machine_limits_to_gcode": "0",
+ "enable_filament_ramming": "0",
+ "enable_long_retraction_when_cut": "0",
+ "extra_loading_move": "0",
+ "extruder_clearance_height_to_lid": "34",
+ "extruder_clearance_height_to_rod": "34",
+ "extruder_clearance_radius": "47",
+ "extruder_colour": [
+ "#FCE94F"
+ ],
+ "extruder_offset": [
+ "0x0"
+ ],
+ "fan_kickstart": "0",
+ "fan_speedup_overhangs": "1",
+ "fan_speedup_time": "0",
+ "from": "system",
+ "gcode_flavor": "klipper",
+ "head_wrap_detect_zone": [],
+ "high_current_on_filament_swap": "0",
+ "host_type": "octoprint",
+ "inherits": "fdm_machine_common",
+ "instantiation": "false",
+ "layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}\n_MMU_UPDATE_HEIGHT",
+ "long_retractions_when_cut": [
+ "0"
+ ],
+ "machine_end_gcode": "MMU_END\nEND_PRINT",
+ "machine_load_filament_time": "0",
+ "machine_max_acceleration_e": [
+ "5000",
+ "5000"
+ ],
+ "machine_max_acceleration_extruding": [
+ "20000",
+ "20000"
+ ],
+ "machine_max_acceleration_retracting": [
+ "5000",
+ "5000"
+ ],
+ "machine_max_acceleration_travel": [
+ "9000",
+ "9000"
+ ],
+ "machine_max_acceleration_x": [
+ "20000",
+ "20000"
+ ],
+ "machine_max_acceleration_y": [
+ "20000",
+ "20000"
+ ],
+ "machine_max_acceleration_z": [
+ "500",
+ "500"
+ ],
+ "machine_max_jerk_e": [
+ "2.5",
+ "2.5"
+ ],
+ "machine_max_jerk_x": [
+ "9",
+ "9"
+ ],
+ "machine_max_jerk_y": [
+ "9",
+ "9"
+ ],
+ "machine_max_jerk_z": [
+ "3",
+ "3"
+ ],
+ "machine_max_junction_deviation": [
+ "0",
+ "0"
+ ],
+ "machine_max_speed_e": [
+ "60",
+ "60"
+ ],
+ "machine_max_speed_x": [
+ "500",
+ "500"
+ ],
+ "machine_max_speed_y": [
+ "500",
+ "500"
+ ],
+ "machine_max_speed_z": [
+ "30",
+ "30"
+ ],
+ "machine_min_extruding_rate": [
+ "0",
+ "0"
+ ],
+ "machine_min_travel_rate": [
+ "0",
+ "0"
+ ],
+ "machine_pause_gcode": "PAUSE",
+ "machine_start_gcode": "SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nMMU_START_SETUP INITIAL_TOOL={initial_tool} TOTAL_TOOLCHANGES=!total_toolchanges! REFERENCED_TOOLS=!referenced_tools! TOOL_COLORS=!colors! TOOL_TEMPS=!temperatures! TOOL_MATERIALS=!materials! FILAMENT_NAMES=!filament_names! PURGE_VOLUMES=!purge_volumes!\nMMU_START_CHECK\nSTART_PRINT BED_TEMP=[bed_temperature_initial_layer] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TYPE=\"{curr_bed_type}\" MESH_MIN={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} MESH_MAX={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE_MARGIN={adaptive_bed_mesh_margin}\n; Enter YOUR exist start_print macro call here (minus purging logic because tool may not be loaded yet)\nMMU_START_LOAD_INITIAL_TOOL\n; Optionally add YOUR additional start logic (like purging) here to run just prior to start\nSTART_PRINT_SECONDARY\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} ; For pause at layer functionality and better print stats",
+ "machine_tool_change_time": "0",
+ "machine_unload_filament_time": "0",
+ "manual_filament_change": "0",
+ "max_layer_height": [
+ "0.28"
+ ],
+ "max_resonance_avoidance_speed": "120",
+ "min_layer_height": [
+ "0.08"
+ ],
+ "min_resonance_avoidance_speed": "70",
+ "name": "fdm_openeye_common",
+ "nozzle_diameter": [
+ "0.4",
+ "0.4"
+ ],
+ "nozzle_height": "2.5",
+ "nozzle_hrc": "0",
+ "nozzle_type": "brass",
+ "nozzle_volume": "0",
+ "parking_pos_retraction": "0",
+ "pellet_modded_printer": "0",
+ "preferred_orientation": "0",
+ "print_host": "openeye3dpi.local",
+ "printable_height": "250",
+ "printer_settings_id": "",
+ "printer_technology": "FFF",
+ "printer_variant": "0.4",
+ "printing_by_object_gcode": "",
+ "purge_in_prime_tower": "1",
+ "resonance_avoidance": "0",
+ "retract_before_wipe": [
+ "0%"
+ ],
+ "retract_length_toolchange": [
+ "0"
+ ],
+ "retract_lift_above": [
+ "0"
+ ],
+ "retract_lift_below": [
+ "180",
+ "180"
+ ],
+ "retract_lift_enforce": [
+ "All Surfaces"
+ ],
+ "retract_restart_extra": [
+ "0"
+ ],
+ "retract_restart_extra_toolchange": [
+ "0"
+ ],
+ "retract_when_changing_layer": [
+ "1"
+ ],
+ "retraction_distances_when_cut": [
+ "18"
+ ],
+ "retraction_length": [
+ "0.8"
+ ],
+ "retraction_minimum_travel": [
+ "1"
+ ],
+ "retraction_speed": [
+ "30"
+ ],
+ "scan_first_layer": "0",
+ "silent_mode": "0",
+ "single_extruder_multi_material": "1",
+ "support_air_filtration": "0",
+ "support_chamber_temp_control": "0",
+ "support_multi_bed_types": "1",
+ "template_custom_gcode": "",
+ "thumbnails": "48x48/PNG, 300x300/PNG",
+ "thumbnails_format": "PNG",
+ "time_cost": "0",
+ "time_lapse_gcode": "",
+ "travel_slope": [
+ "3"
+ ],
+ "type": "machine",
+ "use_firmware_retraction": "0",
+ "use_relative_e_distances": "1",
+ "wipe": [
+ "1"
+ ],
+ "wipe_distance": [
+ "1"
+ ],
+ "z_hop": [
+ "0.4"
+ ],
+ "z_hop_types": [
+ "Auto Lift"
+ ],
+ "z_offset": "0"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/pei.png b/resources/profiles/OpenEYE/pei.png
new file mode 100644
index 0000000000..30c64391b8
Binary files /dev/null and b/resources/profiles/OpenEYE/pei.png differ
diff --git a/resources/profiles/OpenEYE/peo.png b/resources/profiles/OpenEYE/peo.png
new file mode 100644
index 0000000000..b3d70117d7
Binary files /dev/null and b/resources/profiles/OpenEYE/peo.png differ
diff --git a/resources/profiles/OpenEYE/pet.png b/resources/profiles/OpenEYE/pet.png
new file mode 100644
index 0000000000..0679d1bf93
Binary files /dev/null and b/resources/profiles/OpenEYE/pet.png differ
diff --git a/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle.json b/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle.json
new file mode 100644
index 0000000000..b936ec8a5e
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle.json
@@ -0,0 +1,18 @@
+{
+ "type": "process",
+ "name": "0.08mm Extra Fine @OpenEYE Peacock V2 0.2 nozzle",
+ "inherits": "fdm_process_openeye_0.08_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP139",
+ "instantiation": "true",
+ "description": "High quality profile for 0.2mm nozzle, prioritizing print quality.",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "40",
+ "overhang_1_4_speed": "60",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..a0a4d450db
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.08mm Extra Fine @OpenEYE Peacock V2.json
@@ -0,0 +1,27 @@
+{
+ "type": "process",
+ "name": "0.08mm Extra Fine @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.08_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP136",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "50",
+ "initial_layer_infill_speed": "70",
+ "initial_layer_speed": "40",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "120",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "overhang_1_4_speed": "60",
+ "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "100",
+ "top_surface_speed": "120",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle.json b/resources/profiles/OpenEYE/process/0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle.json
new file mode 100644
index 0000000000..3b7dad1b6d
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle.json
@@ -0,0 +1,16 @@
+{
+ "type": "process",
+ "name": "0.10mm Standard @OpenEYE Peacock V2 0.2 nozzle",
+ "inherits": "fdm_process_openeye_0.10_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP123",
+ "instantiation": "true",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "40",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle.json b/resources/profiles/OpenEYE/process/0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle.json
new file mode 100644
index 0000000000..a0f9480ac6
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle.json
@@ -0,0 +1,17 @@
+{
+ "type": "process",
+ "name": "0.12mm Balanced Quality @OpenEYE Peacock V2 0.2 nozzle",
+ "inherits": "fdm_process_openeye_0.12_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP140",
+ "instantiation": "true",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "40",
+ "overhang_1_4_speed": "60",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.12mm Fine @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.12mm Fine @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..5977f3977d
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.12mm Fine @OpenEYE Peacock V2.json
@@ -0,0 +1,31 @@
+{
+ "type": "process",
+ "name": "0.12mm Fine @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.12_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP142",
+ "instantiation": "true",
+ "bottom_shell_layers": "7",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "50",
+ "initial_layer_infill_speed": "70",
+ "initial_layer_speed": "40",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "overhang_1_4_speed": "60",
+ "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "100",
+ "top_color_penetration_layers": "7",
+ "top_shell_layers": "9",
+ "top_shell_thickness": "0.8",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.16mm Balanced Quality @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.16mm Balanced Quality @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..9d3101e52d
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.16mm Balanced Quality @OpenEYE Peacock V2.json
@@ -0,0 +1,26 @@
+{
+ "type": "process",
+ "name": "0.16mm Balanced Quality @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.16_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP174",
+ "instantiation": "true",
+ "description": "High quality profile for 0.16mm layer height, prioritizing print quality and strength.",
+ "default_acceleration": "4000",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "180",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "overhang_1_4_speed": "60",
+ "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "180",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.16mm Standard @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.16mm Standard @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..66e8d419b0
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.16mm Standard @OpenEYE Peacock V2.json
@@ -0,0 +1,21 @@
+{
+ "type": "process",
+ "name": "0.16mm Standard @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.16_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP143",
+ "instantiation": "true",
+ "description": "Standard profile for 0.16mm layer height, prioritizing speed.",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "50",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_1_4_speed": "60",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle.json b/resources/profiles/OpenEYE/process/0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle.json
new file mode 100644
index 0000000000..07e5caf0ad
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle.json
@@ -0,0 +1,26 @@
+{
+ "type": "process",
+ "name": "0.18mm Balanced Quality @OpenEYE Peacock V2 0.6 nozzle",
+ "inherits": "fdm_process_openeye_0.18_nozzle_0.6",
+ "from": "system",
+ "setting_id": "GP137",
+ "instantiation": "true",
+ "description": "High quality profile for 0.6mm nozzle, prioritizing print quality and strength.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.6 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.20mm Balanced Strength @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.20mm Balanced Strength @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..997c79a2d1
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.20mm Balanced Strength @OpenEYE Peacock V2.json
@@ -0,0 +1,26 @@
+{
+ "type": "process",
+ "name": "0.20mm Balanced Strength @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.20_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP173",
+ "instantiation": "true",
+ "description": "High quality profile for 0.2mm layer height, prioritizing strength and print quality.",
+ "bottom_shell_layers": "4",
+ "default_acceleration": "4000",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "200",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "200",
+ "top_shell_layers": "6",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.20mm Standard @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.20mm Standard @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..6cfd900f45
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.20mm Standard @OpenEYE Peacock V2.json
@@ -0,0 +1,21 @@
+{
+ "type": "process",
+ "name": "0.20mm Standard @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.20_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP124",
+ "instantiation": "true",
+ "description": "Standard profile for 0.4mm nozzle, prioritizing speed.",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "50",
+ "internal_solid_infill_speed": "250",
+ "inner_wall_speed": "300",
+ "outer_wall_speed": "200",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle.json b/resources/profiles/OpenEYE/process/0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle.json
new file mode 100644
index 0000000000..1485ca9fe0
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle.json
@@ -0,0 +1,27 @@
+{
+ "type": "process",
+ "name": "0.24mm Balanced Quality @OpenEYE Peacock V2 0.8 nozzle",
+ "inherits": "fdm_process_openeye_0.24_nozzle_0.8",
+ "from": "system",
+ "setting_id": "GP138",
+ "instantiation": "true",
+ "description": "High quality profile for 0.8mm nozzle, prioritizing print quality.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.8 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle.json b/resources/profiles/OpenEYE/process/0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle.json
new file mode 100644
index 0000000000..316b2e7ae0
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle.json
@@ -0,0 +1,26 @@
+{
+ "type": "process",
+ "name": "0.24mm Balanced Strength @OpenEYE Peacock V2 0.6 nozzle",
+ "inherits": "fdm_process_openeye_0.24_nozzle_0.6",
+ "from": "system",
+ "setting_id": "GP146",
+ "instantiation": "true",
+ "description": "Strength profile for 0.6mm nozzle, prioritizing strength.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.6 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.24mm Standard @OpenEYE Peacock V2.json b/resources/profiles/OpenEYE/process/0.24mm Standard @OpenEYE Peacock V2.json
new file mode 100644
index 0000000000..71492028d9
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.24mm Standard @OpenEYE Peacock V2.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.24mm Standard @OpenEYE Peacock V2",
+ "inherits": "fdm_process_openeye_0.24_nozzle_0.4",
+ "from": "system",
+ "setting_id": "GP144",
+ "instantiation": "true",
+ "default_acceleration": "8000",
+ "initial_layer_speed": "50",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle.json b/resources/profiles/OpenEYE/process/0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle.json
new file mode 100644
index 0000000000..4733f27324
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle.json
@@ -0,0 +1,26 @@
+{
+ "type": "process",
+ "name": "0.30mm Standard @OpenEYE Peacock V2 0.6 nozzle",
+ "inherits": "fdm_process_openeye_0.30_nozzle_0.6",
+ "from": "system",
+ "setting_id": "GP125",
+ "instantiation": "true",
+ "description": "Standard profile for 0.6mm nozzle, prioritizing speed.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.6 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle.json b/resources/profiles/OpenEYE/process/0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle.json
new file mode 100644
index 0000000000..170c9e4e7f
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle.json
@@ -0,0 +1,27 @@
+{
+ "type": "process",
+ "name": "0.32mm Balanced Strength @OpenEYE Peacock V2 0.8 nozzle",
+ "inherits": "fdm_process_openeye_0.32_nozzle_0.8",
+ "from": "system",
+ "setting_id": "GP149",
+ "instantiation": "true",
+ "description": "Strength profile for 0.8mm nozzle, prioritizing strength.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.8 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle.json b/resources/profiles/OpenEYE/process/0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle.json
new file mode 100644
index 0000000000..878383b1f6
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle.json
@@ -0,0 +1,27 @@
+{
+ "type": "process",
+ "name": "0.40mm Standard @OpenEYE Peacock V2 0.8 nozzle",
+ "inherits": "fdm_process_openeye_0.40_nozzle_0.8",
+ "from": "system",
+ "setting_id": "GP126",
+ "instantiation": "true",
+ "description": "Standard profile for 0.8mm nozzle, prioritizing speed.",
+ "bridge_speed": "50",
+ "default_acceleration": "8000",
+ "gap_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "initial_layer_speed": "50",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "outer_wall_speed": "200",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "10",
+ "prime_tower_brim_width": "3",
+ "prime_tower_width": "60",
+ "sparse_infill_speed": "350",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "compatible_printers": [
+ "OpenEYE Peacock V2 0.8 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_common.json b/resources/profiles/OpenEYE/process/fdm_process_common.json
new file mode 100644
index 0000000000..40987d67ab
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_common.json
@@ -0,0 +1,116 @@
+{
+ "type": "process",
+ "name": "fdm_process_common",
+ "from": "system",
+ "instantiation": "false",
+ "adaptive_layer_height": "0",
+ "bottom_shell_layers": "3",
+ "bottom_shell_thickness": "0",
+ "bottom_surface_pattern": "monotonic",
+ "bridge_flow": "0.95",
+ "bridge_no_support": "0",
+ "bridge_speed": "25",
+ "brim_object_gap": "0.1",
+ "brim_width": "5",
+ "compatible_printers_condition": "",
+ "default_acceleration": "10000",
+ "detect_overhang_wall": "1",
+ "detect_thin_wall": "0",
+ "draft_shield": "disabled",
+ "elefant_foot_compensation": "0.15",
+ "elefant_foot_compensation_layers": "1",
+ "enable_arc_fitting": "1",
+ "enable_prime_tower": "1",
+ "enable_support": "0",
+ "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode",
+ "gap_infill_speed": "30",
+ "infill_combination": "0",
+ "infill_direction": "45",
+ "infill_wall_overlap": "15%",
+ "initial_layer_line_width": "0.5",
+ "initial_layer_print_height": "0.2",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.45",
+ "inner_wall_speed": "40",
+ "interface_shells": "0",
+ "internal_bridge_support_thickness": "0.8",
+ "internal_solid_infill_line_width": "0.42",
+ "internal_solid_infill_speed": "40",
+ "ironing_flow": "10%",
+ "ironing_inset": "0.21",
+ "ironing_spacing": "0.15",
+ "ironing_speed": "30",
+ "ironing_type": "no ironing",
+ "layer_height": "0.2",
+ "line_width": "0.42",
+ "max_bridge_length": "0",
+ "max_travel_detour_distance": "0",
+ "minimum_sparse_infill_area": "15",
+ "only_one_wall_top": "1",
+ "outer_wall_line_width": "0.42",
+ "outer_wall_speed": "120",
+ "prime_tower_width": "35",
+ "print_sequence": "by layer",
+ "print_settings_id": "",
+ "prime_tower_brim_width": "3",
+ "raft_layers": "0",
+ "reduce_crossing_wall": "0",
+ "reduce_infill_retraction": "1",
+ "resolution": "0.012",
+ "scarf_angle_threshold": "155",
+ "seam_position": "aligned",
+ "skirt_distance": "2",
+ "skirt_height": "1",
+ "skirt_loops": "0",
+ "sparse_infill_density": "15%",
+ "skeleton_infill_density": "15%",
+ "skin_infill_density": "15%",
+ "sparse_infill_line_width": "0.45",
+ "skin_infill_line_width": "0.45",
+ "skin_infill_depth": "2.0",
+ "skeleton_infill_line_width": "0.45",
+ "sparse_infill_pattern": "grid",
+ "sparse_infill_speed": "50",
+ "spiral_mode": "0",
+ "standby_temperature_delta": "-5",
+ "support_base_pattern": "default",
+ "support_base_pattern_spacing": "2.5",
+ "support_bottom_z_distance": "0.2",
+ "support_expansion": "0",
+ "support_filament": "0",
+ "support_interface_bottom_layers": "2",
+ "support_interface_filament": "0",
+ "support_interface_loop_pattern": "0",
+ "support_interface_pattern": "auto",
+ "support_interface_spacing": "0.5",
+ "support_interface_speed": "80",
+ "support_interface_top_layers": "2",
+ "support_line_width": "0.42",
+ "support_object_xy_distance": "0.35",
+ "support_on_build_plate_only": "0",
+ "support_speed": "40",
+ "support_style": "default",
+ "support_threshold_angle": "30",
+ "support_top_z_distance": "0.2",
+ "support_type": "tree(auto)",
+ "seam_slope_type": "none",
+ "seam_slope_start_height": "10%",
+ "seam_slope_min_length": "10",
+ "symmetric_infill_y_axis": "0",
+ "top_shell_layers": "3",
+ "top_shell_thickness": "0.8",
+ "top_surface_line_width": "0.42",
+ "top_surface_pattern": "monotonicline",
+ "top_surface_speed": "30",
+ "travel_acceleration": "10000",
+ "travel_speed": "400",
+ "tree_support_branch_angle": "45",
+ "tree_support_branch_diameter": "2",
+ "tree_support_wall_count": "0",
+ "wall_generator": "classic",
+ "wall_infill_order": "inner wall/outer wall/infill",
+ "wall_loops": "2",
+ "wipe_tower_no_sparse_layers": "0",
+ "xy_contour_compensation": "0",
+ "xy_hole_compensation": "0"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.06_nozzle_0.2.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.06_nozzle_0.2.json
new file mode 100644
index 0000000000..6354d949fd
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.06_nozzle_0.2.json
@@ -0,0 +1,33 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.06_nozzle_0.2",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.25",
+ "initial_layer_print_height": "0.1",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.22",
+ "internal_solid_infill_line_width": "0.22",
+ "ironing_inset": "0.11",
+ "initial_layer_infill_speed": "70",
+ "layer_height": "0.06",
+ "line_width": "0.22",
+ "outer_wall_line_width": "0.22",
+ "sparse_infill_line_width": "0.22",
+ "skin_infill_line_width": "0.22",
+ "skeleton_infill_line_width": "0.22",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.06",
+ "support_line_width": "0.22",
+ "support_top_z_distance": "0.06",
+ "top_shell_layers": "7",
+ "top_color_penetration_layers": "7",
+ "top_surface_line_width": "0.22",
+ "top_surface_speed": "150",
+ "wall_loops": "4"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.2.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.2.json
new file mode 100644
index 0000000000..309d338619
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.2.json
@@ -0,0 +1,33 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.08_nozzle_0.2",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.25",
+ "initial_layer_print_height": "0.1",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.22",
+ "internal_solid_infill_line_width": "0.22",
+ "ironing_inset": "0.11",
+ "initial_layer_infill_speed": "70",
+ "layer_height": "0.08",
+ "line_width": "0.22",
+ "outer_wall_line_width": "0.22",
+ "sparse_infill_line_width": "0.22",
+ "skin_infill_line_width": "0.22",
+ "skeleton_infill_line_width": "0.22",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.08",
+ "support_line_width": "0.22",
+ "support_top_z_distance": "0.08",
+ "top_shell_layers": "7",
+ "top_color_penetration_layers": "7",
+ "top_surface_line_width": "0.22",
+ "top_surface_speed": "150",
+ "wall_loops": "4"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.4.json
new file mode 100644
index 0000000000..25f9cc89a5
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.08_nozzle_0.4.json
@@ -0,0 +1,25 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.08_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "7",
+ "bottom_color_penetration_layers": "7",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed":"20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "ironing_flow": "8%",
+ "initial_layer_infill_speed": "105",
+ "layer_height": "0.08",
+ "sparse_infill_speed": "270",
+ "support_bottom_z_distance": "0.08",
+ "support_threshold_angle": "15",
+ "support_top_z_distance": "0.08",
+ "top_shell_layers": "9",
+ "top_color_penetration_layers": "9",
+ "top_shell_thickness": "1.0"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.10_nozzle_0.2.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.10_nozzle_0.2.json
new file mode 100644
index 0000000000..983138a494
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.10_nozzle_0.2.json
@@ -0,0 +1,33 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.10_nozzle_0.2",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.25",
+ "initial_layer_print_height": "0.1",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.22",
+ "internal_solid_infill_line_width": "0.22",
+ "ironing_inset": "0.11",
+ "initial_layer_infill_speed": "70",
+ "layer_height": "0.1",
+ "line_width": "0.22",
+ "outer_wall_line_width": "0.22",
+ "sparse_infill_line_width": "0.22",
+ "skin_infill_line_width": "0.22",
+ "skeleton_infill_line_width": "0.22",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.1",
+ "support_line_width": "0.22",
+ "support_top_z_distance": "0.1",
+ "top_shell_layers": "7",
+ "top_color_penetration_layers": "7",
+ "top_surface_line_width": "0.22",
+ "top_surface_speed": "150",
+ "wall_loops": "4"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.2.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.2.json
new file mode 100644
index 0000000000..67146aef2c
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.2.json
@@ -0,0 +1,33 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.12_nozzle_0.2",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.25",
+ "initial_layer_print_height": "0.1",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.22",
+ "internal_solid_infill_line_width": "0.22",
+ "ironing_inset": "0.11",
+ "initial_layer_infill_speed": "70",
+ "layer_height": "0.12",
+ "line_width": "0.22",
+ "outer_wall_line_width": "0.22",
+ "sparse_infill_line_width": "0.22",
+ "skin_infill_line_width": "0.22",
+ "skeleton_infill_line_width": "0.22",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.12",
+ "support_line_width": "0.22",
+ "support_top_z_distance": "0.12",
+ "top_shell_layers": "7",
+ "top_color_penetration_layers": "7",
+ "top_surface_line_width": "0.22",
+ "top_surface_speed": "150",
+ "wall_loops": "4"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.4.json
new file mode 100644
index 0000000000..a08f0fc9ff
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.12_nozzle_0.4.json
@@ -0,0 +1,24 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.12_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed": "20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "layer_height": "0.12",
+ "sparse_infill_speed": "270",
+ "support_bottom_z_distance": "0.12",
+ "support_threshold_angle": "20",
+ "support_top_z_distance": "0.12",
+ "top_shell_layers": "5",
+ "top_color_penetration_layers": "5",
+ "top_shell_thickness": "0.6"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.14_nozzle_0.2.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.14_nozzle_0.2.json
new file mode 100644
index 0000000000..f5ced921a7
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.14_nozzle_0.2.json
@@ -0,0 +1,33 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.14_nozzle_0.2",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "5",
+ "bottom_color_penetration_layers": "5",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.25",
+ "initial_layer_print_height": "0.1",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.22",
+ "internal_solid_infill_line_width": "0.22",
+ "ironing_inset": "0.11",
+ "initial_layer_infill_speed": "70",
+ "layer_height": "0.14",
+ "line_width": "0.22",
+ "outer_wall_line_width": "0.22",
+ "sparse_infill_line_width": "0.22",
+ "skin_infill_line_width": "0.22",
+ "skeleton_infill_line_width": "0.22",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.14",
+ "support_line_width": "0.22",
+ "support_top_z_distance": "0.14",
+ "top_shell_layers": "7",
+ "top_color_penetration_layers": "7",
+ "top_surface_line_width": "0.22",
+ "top_surface_speed": "150",
+ "wall_loops": "4"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.16_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.16_nozzle_0.4.json
new file mode 100644
index 0000000000..8a106a5385
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.16_nozzle_0.4.json
@@ -0,0 +1,24 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.16_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bottom_shell_layers": "4",
+ "bottom_color_penetration_layers": "4",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed": "20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "layer_height": "0.16",
+ "sparse_infill_speed": "270",
+ "support_bottom_z_distance": "0.16",
+ "support_threshold_angle": "25",
+ "support_top_z_distance": "0.16",
+ "top_shell_layers": "6",
+ "top_color_penetration_layers": "6",
+ "top_shell_thickness": "1.0"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.18_nozzle_0.6.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.18_nozzle_0.6.json
new file mode 100644
index 0000000000..8b6629efba
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.18_nozzle_0.6.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.18_nozzle_0.6",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.62",
+ "initial_layer_print_height": "0.3",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.62",
+ "internal_solid_infill_line_width": "0.62",
+ "ironing_inset": "0.31",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.18",
+ "line_width": "0.62",
+ "outer_wall_line_width": "0.62",
+ "overhang_3_4_speed": "15",
+ "sparse_infill_line_width": "0.62",
+ "skin_infill_line_width": "0.62",
+ "skeleton_infill_line_width": "0.62",
+ "sparse_infill_speed": "100",
+ "support_bottom_z_distance": "0.18",
+ "support_line_width": "0.62",
+ "support_top_z_distance": "0.18",
+ "top_surface_line_width": "0.62",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.20_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.20_nozzle_0.4.json
new file mode 100644
index 0000000000..6689407a67
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.20_nozzle_0.4.json
@@ -0,0 +1,18 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.20_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed": "20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "sparse_infill_speed": "270",
+ "top_shell_layers": "5",
+ "top_color_penetration_layers": "5",
+ "top_shell_thickness": "1.0"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.4.json
new file mode 100644
index 0000000000..552092e6d9
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.4.json
@@ -0,0 +1,21 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.24_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed": "20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "layer_height": "0.24",
+ "sparse_infill_speed": "270",
+ "support_threshold_angle": "35",
+ "top_shell_layers": "4",
+ "top_color_penetration_layers": "4",
+ "top_shell_thickness": "1.0",
+ "top_surface_line_width": "0.45"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.6.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.6.json
new file mode 100644
index 0000000000..7f0e3b3e88
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.6.json
@@ -0,0 +1,28 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.24_nozzle_0.6",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.62",
+ "initial_layer_print_height": "0.3",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.62",
+ "internal_solid_infill_line_width": "0.62",
+ "ironing_inset": "0.31",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.24",
+ "line_width": "0.62",
+ "outer_wall_line_width": "0.62",
+ "overhang_3_4_speed": "15",
+ "sparse_infill_line_width": "0.62",
+ "skin_infill_line_width": "0.62",
+ "skeleton_infill_line_width": "0.62",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.62",
+ "top_surface_line_width": "0.62",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.8.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.8.json
new file mode 100644
index 0000000000..34e37cea92
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.24_nozzle_0.8.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.24_nozzle_0.8",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.82",
+ "initial_layer_print_height": "0.4",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.82",
+ "internal_solid_infill_line_width": "0.82",
+ "ironing_inset": "0.41",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.24",
+ "line_width": "0.82",
+ "outer_wall_line_width": "0.82",
+ "overhang_3_4_speed": "25",
+ "overhang_4_4_speed": "5",
+ "sparse_infill_line_width": "0.82",
+ "skin_infill_line_width": "0.82",
+ "skeleton_infill_line_width": "0.82",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.82",
+ "top_surface_line_width": "0.82",
+ "top_surface_pattern": "monotonic",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.28_nozzle_0.4.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.28_nozzle_0.4.json
new file mode 100644
index 0000000000..d1a15baea5
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.28_nozzle_0.4.json
@@ -0,0 +1,21 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.28_nozzle_0.4",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "250",
+ "initial_layer_speed": "20",
+ "inner_wall_speed": "300",
+ "internal_solid_infill_speed": "250",
+ "initial_layer_infill_speed": "105",
+ "layer_height": "0.28",
+ "sparse_infill_speed": "270",
+ "support_threshold_angle": "40",
+ "top_shell_layers": "4",
+ "top_color_penetration_layers": "4",
+ "top_shell_thickness": "1.0",
+ "top_surface_line_width": "0.45"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.30_nozzle_0.6.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.30_nozzle_0.6.json
new file mode 100644
index 0000000000..b1106a1682
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.30_nozzle_0.6.json
@@ -0,0 +1,28 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.30_nozzle_0.6",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.62",
+ "initial_layer_print_height": "0.3",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.62",
+ "internal_solid_infill_line_width": "0.62",
+ "ironing_inset": "0.31",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.3",
+ "line_width": "0.62",
+ "outer_wall_line_width": "0.62",
+ "overhang_3_4_speed": "15",
+ "sparse_infill_line_width": "0.62",
+ "skin_infill_line_width": "0.62",
+ "skeleton_infill_line_width": "0.62",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.62",
+ "top_surface_line_width": "0.62",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.32_nozzle_0.8.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.32_nozzle_0.8.json
new file mode 100644
index 0000000000..f0f9f2da9d
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.32_nozzle_0.8.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.32_nozzle_0.8",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.82",
+ "initial_layer_print_height": "0.4",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.82",
+ "internal_solid_infill_line_width": "0.82",
+ "ironing_inset": "0.41",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.32",
+ "line_width": "0.82",
+ "outer_wall_line_width": "0.82",
+ "overhang_3_4_speed": "25",
+ "overhang_4_4_speed": "5",
+ "sparse_infill_line_width": "0.82",
+ "skin_infill_line_width": "0.82",
+ "skeleton_infill_line_width": "0.82",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.82",
+ "top_surface_line_width": "0.82",
+ "top_surface_pattern": "monotonic",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.36_nozzle_0.6.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.36_nozzle_0.6.json
new file mode 100644
index 0000000000..b625904c7b
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.36_nozzle_0.6.json
@@ -0,0 +1,28 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.36_nozzle_0.6",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.62",
+ "initial_layer_print_height": "0.3",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.62",
+ "internal_solid_infill_line_width": "0.62",
+ "ironing_inset": "0.31",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.36",
+ "line_width": "0.62",
+ "outer_wall_line_width": "0.62",
+ "overhang_3_4_speed": "15",
+ "sparse_infill_line_width": "0.62",
+ "skin_infill_line_width": "0.62",
+ "skeleton_infill_line_width": "0.62",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.62",
+ "top_surface_line_width": "0.62",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.40_nozzle_0.8.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.40_nozzle_0.8.json
new file mode 100644
index 0000000000..304d66c8de
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.40_nozzle_0.8.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.40_nozzle_0.8",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.82",
+ "initial_layer_print_height": "0.4",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.82",
+ "internal_solid_infill_line_width": "0.82",
+ "ironing_inset": "0.41",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.4",
+ "line_width": "0.82",
+ "outer_wall_line_width": "0.82",
+ "overhang_3_4_speed": "25",
+ "overhang_4_4_speed": "5",
+ "sparse_infill_line_width": "0.82",
+ "skin_infill_line_width": "0.82",
+ "skeleton_infill_line_width": "0.82",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.82",
+ "top_surface_line_width": "0.82",
+ "top_surface_pattern": "monotonic",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.42_nozzle_0.6.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.42_nozzle_0.6.json
new file mode 100644
index 0000000000..e2fd061207
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.42_nozzle_0.6.json
@@ -0,0 +1,28 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.42_nozzle_0.6",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.62",
+ "initial_layer_print_height": "0.3",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.62",
+ "internal_solid_infill_line_width": "0.62",
+ "ironing_inset": "0.31",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.42",
+ "line_width": "0.62",
+ "outer_wall_line_width": "0.62",
+ "overhang_3_4_speed": "15",
+ "sparse_infill_line_width": "0.62",
+ "skin_infill_line_width": "0.62",
+ "skeleton_infill_line_width": "0.62",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.62",
+ "top_surface_line_width": "0.62",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.48_nozzle_0.8.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.48_nozzle_0.8.json
new file mode 100644
index 0000000000..12a5931ee2
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.48_nozzle_0.8.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.48_nozzle_0.8",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.82",
+ "initial_layer_print_height": "0.4",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.82",
+ "internal_solid_infill_line_width": "0.82",
+ "ironing_inset": "0.41",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.48",
+ "line_width": "0.82",
+ "outer_wall_line_width": "0.82",
+ "overhang_3_4_speed": "25",
+ "overhang_4_4_speed": "5",
+ "sparse_infill_line_width": "0.82",
+ "skin_infill_line_width": "0.82",
+ "skeleton_infill_line_width": "0.82",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.82",
+ "top_surface_line_width": "0.82",
+ "top_surface_pattern": "monotonic",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_0.56_nozzle_0.8.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.56_nozzle_0.8.json
new file mode 100644
index 0000000000..6522f6b686
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_0.56_nozzle_0.8.json
@@ -0,0 +1,30 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_0.56_nozzle_0.8",
+ "inherits": "fdm_process_openeye_common",
+ "from": "system",
+ "instantiation": "false",
+ "bridge_flow": "1",
+ "bridge_speed": "30",
+ "elefant_foot_compensation": "0.15",
+ "initial_layer_line_width": "0.82",
+ "initial_layer_print_height": "0.4",
+ "initial_layer_speed": "20",
+ "inner_wall_line_width": "0.82",
+ "internal_solid_infill_line_width": "0.82",
+ "ironing_inset": "0.41",
+ "initial_layer_infill_speed": "55",
+ "layer_height": "0.56",
+ "line_width": "0.82",
+ "outer_wall_line_width": "0.82",
+ "overhang_3_4_speed": "25",
+ "overhang_4_4_speed": "5",
+ "sparse_infill_line_width": "0.82",
+ "skin_infill_line_width": "0.82",
+ "skeleton_infill_line_width": "0.82",
+ "sparse_infill_speed": "100",
+ "support_line_width": "0.82",
+ "top_surface_line_width": "0.82",
+ "top_surface_pattern": "monotonic",
+ "top_surface_speed": "150"
+}
\ No newline at end of file
diff --git a/resources/profiles/OpenEYE/process/fdm_process_openeye_common.json b/resources/profiles/OpenEYE/process/fdm_process_openeye_common.json
new file mode 100644
index 0000000000..c83936321b
--- /dev/null
+++ b/resources/profiles/OpenEYE/process/fdm_process_openeye_common.json
@@ -0,0 +1,54 @@
+{
+ "type": "process",
+ "name": "fdm_process_openeye_common",
+ "inherits": "fdm_process_common",
+ "from": "system",
+ "instantiation": "false",
+ "align_infill_direction_to_model": "1",
+ "exclude_object": "1",
+ "bridge_speed": "50",
+ "default_acceleration": "10000",
+ "enable_overhang_speed": "1",
+ "gap_infill_speed": "50",
+ "initial_layer_acceleration": "500",
+ "initial_layer_infill_speed": "60",
+ "initial_layer_speed": "30",
+ "inner_wall_acceleration": "0",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "5000",
+ "outer_wall_speed": "120",
+ "overhang_1_4_speed": "0",
+ "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "10",
+ "reduce_crossing_wall": "1",
+ "role_based_wipe_speed": "1",
+ "scarf_angle_threshold": "155",
+ "scarf_joint_flow_ratio": "1",
+ "scarf_joint_speed": "100%",
+ "scarf_overhang_threshold": "40%",
+ "seam_gap": "10%",
+ "seam_position": "aligned_back",
+ "seam_slope_conditional": "1",
+ "seam_slope_entire_loop": "0",
+ "seam_slope_inner_walls": "1",
+ "seam_slope_min_length": "20",
+ "seam_slope_start_height": "0",
+ "seam_slope_steps": "10",
+ "seam_slope_type": "none",
+ "small_perimeter_speed": "50%",
+ "small_perimeter_threshold": "0",
+ "sparse_infill_acceleration": "100%",
+ "sparse_infill_speed": "250",
+ "support_interface_speed": "80",
+ "support_speed": "150",
+ "support_on_build_plate_only": "1",
+ "travel_acceleration": "10000",
+ "top_surface_acceleration": "2000",
+ "top_surface_speed": "200",
+ "travel_speed": "500",
+ "travel_speed_z": "0",
+ "wipe_tower_wall_type": "rib",
+ "wipe_tower_rib_width": "8"
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json
index ca80b86d12..8e6ac439b1 100644
--- a/resources/profiles/OrcaFilamentLibrary.json
+++ b/resources/profiles/OrcaFilamentLibrary.json
@@ -108,6 +108,10 @@
"name": "COEX ABS PRIME @base",
"sub_path": "filament/COEX/COEX ABS PRIME @base.json"
},
+ {
+ "name": "Eolas Prints ABS @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints ABS @System.json"
+ },
{
"name": "FDplast ABS @base",
"sub_path": "filament/FDplast/FDplast ABS @base.json"
@@ -144,6 +148,10 @@
"name": "COEX ASA PRIME @base",
"sub_path": "filament/COEX/COEX ASA PRIME @base.json"
},
+ {
+ "name": "Eolas Prints ASA @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints ASA @System.json"
+ },
{
"name": "Generic ASA @System",
"sub_path": "filament/Generic ASA @System.json"
@@ -288,6 +296,18 @@
"name": "COEX PETG @base",
"sub_path": "filament/COEX/COEX PETG @base.json"
},
+ {
+ "name": "Eolas Prints PETG @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PETG @System.json"
+ },
+ {
+ "name": "Eolas Prints PETG Transition @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PETG Transition @System.json"
+ },
+ {
+ "name": "Eolas Prints PETG UV Resistant @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json"
+ },
{
"name": "FDplast PETG @base",
"sub_path": "filament/FDplast/FDplast PETG @base.json"
@@ -420,6 +440,42 @@
"name": "COEX PLA PRIME @base",
"sub_path": "filament/COEX/COEX PLA PRIME @base.json"
},
+ {
+ "name": "Eolas Prints PLA Antibacterial @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA High Speed @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA High Speed @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA INGEO 850 @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA INGEO 870 @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA Matte @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Matte @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA Neon @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Neon @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA Premium @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Premium @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA Silk @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Silk @System.json"
+ },
+ {
+ "name": "Eolas Prints PLA Transition @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints PLA Transition @System.json"
+ },
{
"name": "FDplast PLA @base",
"sub_path": "filament/FDplast/FDplast PLA @base.json"
@@ -444,6 +500,10 @@
"name": "NIT PLA @base",
"sub_path": "filament/NIT/NIT PLA @base.json"
},
+ {
+ "name": "Numakers PLA+ @base",
+ "sub_path": "filament/Numakers/Numakers PLA+ @base.json"
+ },
{
"name": "Overture Air PLA @base",
"sub_path": "filament/Overture/Overture Air PLA @base.json"
@@ -517,12 +577,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @base.json"
},
{
- "name": "Panchroma PLA Silk @base",
- "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
+ "name": "Panchroma PLA Satin @base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @base.json"
},
{
- "name": "Panchroma PLA Stain @base",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @base.json"
+ "name": "Panchroma PLA Silk @base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Silk @base.json"
},
{
"name": "Panchroma PLA Starlight @base",
@@ -680,6 +740,22 @@
"name": "COEX TPU 60A @base",
"sub_path": "filament/COEX/COEX TPU 60A @base.json"
},
+ {
+ "name": "Eolas Prints TPU D60 UV Resistant @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json"
+ },
+ {
+ "name": "Eolas Prints TPU Flex 93A @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json"
+ },
+ {
+ "name": "Eolas Prints TPU Flex D53 @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json"
+ },
+ {
+ "name": "Eolas Prints TPU Transition @System",
+ "sub_path": "filament/Eolas Prints/Eolas Prints TPU Transition @System.json"
+ },
{
"name": "FDplast TPU @base",
"sub_path": "filament/FDplast/FDplast TPU @base.json"
@@ -692,10 +768,6 @@
"name": "Overture TPU @base",
"sub_path": "filament/Overture/Overture TPU @base.json"
},
- {
- "name": "Numakers PLA+ @base",
- "sub_path": "filament/Numakers/Numakers PLA+ @base.json"
- },
{
"name": "Bambu ABS @System",
"sub_path": "filament/Bambu/Bambu ABS @System.json"
@@ -980,6 +1052,10 @@
"name": "NIT PLA @System",
"sub_path": "filament/NIT/NIT PLA @System.json"
},
+ {
+ "name": "Numakers PLA+ @System",
+ "sub_path": "filament/Numakers/Numakers PLA+ @System.json"
+ },
{
"name": "Overture Air PLA @System",
"sub_path": "filament/Overture/Overture Air PLA @System.json"
@@ -1053,12 +1129,12 @@
"sub_path": "filament/Polymaker/Panchroma PLA Neon @System.json"
},
{
- "name": "Panchroma PLA Silk @System",
- "sub_path": "filament/Polymaker/Panchroma PLA Silk @System.json"
+ "name": "Panchroma PLA Satin @System",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @System.json"
},
{
- "name": "Panchroma PLA Stain @System",
- "sub_path": "filament/Polymaker/Panchroma PLA Stain @System.json"
+ "name": "Panchroma PLA Silk @System",
+ "sub_path": "filament/Polymaker/Panchroma PLA Silk @System.json"
},
{
"name": "Panchroma PLA Starlight @System",
@@ -1211,10 +1287,6 @@
{
"name": "COEX PLA+Silk @System",
"sub_path": "filament/COEX/COEX PLA+Silk @System.json"
- },
- {
- "name": "Numakers PLA+ @System",
- "sub_path": "filament/Numakers/Numakers PLA+ @System.json"
}
],
"process_list": [],
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json
new file mode 100644
index 0000000000..bf8afa8b31
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json
@@ -0,0 +1,23 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP017",
+ "setting_id": "GFSEP017_00",
+ "name": "Eolas Prints ABS @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_abs",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["ABS"],
+ "nozzle_temperature": ["255"],
+ "nozzle_temperature_initial_layer": ["260"],
+ "nozzle_temperature_range_low": ["240"],
+ "nozzle_temperature_range_high": ["270"],
+ "hot_plate_temp": ["100"],
+ "hot_plate_temp_initial_layer": ["105"],
+ "chamber_temperature": ["40"],
+ "filament_density": ["1.04"],
+ "filament_cost": ["19.50"],
+ "filament_spool_weight": ["900"],
+ "filament_max_volumetric_speed": ["18"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json
new file mode 100644
index 0000000000..21d7ef887b
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json
@@ -0,0 +1,23 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP018",
+ "setting_id": "GFSEP018_00",
+ "name": "Eolas Prints ASA @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_asa",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["ASA"],
+ "nozzle_temperature": ["260"],
+ "nozzle_temperature_initial_layer": ["270"],
+ "nozzle_temperature_range_low": ["245"],
+ "nozzle_temperature_range_high": ["275"],
+ "hot_plate_temp": ["100"],
+ "hot_plate_temp_initial_layer": ["105"],
+ "chamber_temperature": ["40"],
+ "filament_density": ["1.07"],
+ "filament_cost": ["22.50"],
+ "filament_spool_weight": ["900"],
+ "filament_max_volumetric_speed": ["18"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json
new file mode 100644
index 0000000000..6f02d13138
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP010",
+ "setting_id": "GFSEP010_00",
+ "name": "Eolas Prints PETG @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pet",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PETG"],
+ "nozzle_temperature": ["240"],
+ "nozzle_temperature_initial_layer": ["245"],
+ "nozzle_temperature_range_low": ["230"],
+ "nozzle_temperature_range_high": ["260"],
+ "hot_plate_temp": ["80"],
+ "hot_plate_temp_initial_layer": ["85"],
+ "filament_density": ["1.27"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json
new file mode 100644
index 0000000000..d9e125b8ff
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP012",
+ "setting_id": "GFSEP012_00",
+ "name": "Eolas Prints PETG Transition @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pet",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PETG"],
+ "nozzle_temperature": ["240"],
+ "nozzle_temperature_initial_layer": ["245"],
+ "nozzle_temperature_range_low": ["230"],
+ "nozzle_temperature_range_high": ["260"],
+ "hot_plate_temp": ["80"],
+ "hot_plate_temp_initial_layer": ["85"],
+ "filament_density": ["1.27"],
+ "filament_cost": ["17.40"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json
new file mode 100644
index 0000000000..8810346918
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP011",
+ "setting_id": "GFSEP011_00",
+ "name": "Eolas Prints PETG UV Resistant @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pet",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PETG"],
+ "nozzle_temperature": ["245"],
+ "nozzle_temperature_initial_layer": ["250"],
+ "nozzle_temperature_range_low": ["235"],
+ "nozzle_temperature_range_high": ["265"],
+ "hot_plate_temp": ["80"],
+ "hot_plate_temp_initial_layer": ["85"],
+ "filament_density": ["1.27"],
+ "filament_cost": ["30.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json
new file mode 100644
index 0000000000..b41e563301
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP008",
+ "setting_id": "GFSEP008_00",
+ "name": "Eolas Prints PLA Antibacterial @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["216"],
+ "nozzle_temperature_initial_layer": ["220"],
+ "nozzle_temperature_range_low": ["195"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["30.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json
new file mode 100644
index 0000000000..fd41493192
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP005",
+ "setting_id": "GFSEP005_00",
+ "name": "Eolas Prints PLA High Speed @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["220"],
+ "nozzle_temperature_initial_layer": ["220"],
+ "nozzle_temperature_range_low": ["210"],
+ "nozzle_temperature_range_high": ["240"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["17.8"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json
new file mode 100644
index 0000000000..ccef240d17
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP006",
+ "setting_id": "GFSEP006_00",
+ "name": "Eolas Prints PLA INGEO 850 @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["210"],
+ "nozzle_temperature_initial_layer": ["215"],
+ "nozzle_temperature_range_low": ["190"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json
new file mode 100644
index 0000000000..da7ebe735d
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP007",
+ "setting_id": "GFSEP007_00",
+ "name": "Eolas Prints PLA INGEO 870 @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["220"],
+ "nozzle_temperature_initial_layer": ["225"],
+ "nozzle_temperature_range_low": ["200"],
+ "nozzle_temperature_range_high": ["235"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.22"],
+ "filament_cost": ["30.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json
new file mode 100644
index 0000000000..5c90dff774
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP002",
+ "setting_id": "GFSEP002_00",
+ "name": "Eolas Prints PLA Matte @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["215"],
+ "nozzle_temperature_initial_layer": ["220"],
+ "nozzle_temperature_range_low": ["200"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json
new file mode 100644
index 0000000000..857924f75a
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP004",
+ "setting_id": "GFSEP004_00",
+ "name": "Eolas Prints PLA Neon @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["210"],
+ "nozzle_temperature_initial_layer": ["215"],
+ "nozzle_temperature_range_low": ["200"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["10"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json
new file mode 100644
index 0000000000..ceeaabbcf5
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP001",
+ "setting_id": "GFSEP001_00",
+ "name": "Eolas Prints PLA Premium @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["210"],
+ "nozzle_temperature_initial_layer": ["215"],
+ "nozzle_temperature_range_low": ["190"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["19.90"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json
new file mode 100644
index 0000000000..0409a36e12
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP003",
+ "setting_id": "GFSEP003_00",
+ "name": "Eolas Prints PLA Silk @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["215"],
+ "nozzle_temperature_initial_layer": ["220"],
+ "nozzle_temperature_range_low": ["205"],
+ "nozzle_temperature_range_high": ["235"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["25.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["8"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json
new file mode 100644
index 0000000000..0804a78a64
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP009",
+ "setting_id": "GFSEP009_00",
+ "name": "Eolas Prints PLA Transition @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_pla",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["PLA"],
+ "nozzle_temperature": ["210"],
+ "nozzle_temperature_initial_layer": ["215"],
+ "nozzle_temperature_range_low": ["200"],
+ "nozzle_temperature_range_high": ["230"],
+ "hot_plate_temp": ["60"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.24"],
+ "filament_cost": ["13.90"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["15"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json
new file mode 100644
index 0000000000..90cc77ff33
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP013",
+ "setting_id": "GFSEP013_00",
+ "name": "Eolas Prints TPU Flex 93A @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_tpu",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["TPU"],
+ "nozzle_temperature": ["220"],
+ "nozzle_temperature_initial_layer": ["225"],
+ "nozzle_temperature_range_low": ["210"],
+ "nozzle_temperature_range_high": ["240"],
+ "hot_plate_temp": ["50"],
+ "hot_plate_temp_initial_layer": ["55"],
+ "filament_density": ["1.21"],
+ "filament_cost": ["34.99"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["6"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json
new file mode 100644
index 0000000000..96237eb712
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP014",
+ "setting_id": "GFSEP014_00",
+ "name": "Eolas Prints TPU Flex D53 @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_tpu",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["TPU"],
+ "nozzle_temperature": ["220"],
+ "nozzle_temperature_initial_layer": ["225"],
+ "nozzle_temperature_range_low": ["205"],
+ "nozzle_temperature_range_high": ["235"],
+ "hot_plate_temp": ["45"],
+ "hot_plate_temp_initial_layer": ["50"],
+ "filament_density": ["1.17"],
+ "filament_cost": ["38.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["8"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json
new file mode 100644
index 0000000000..e88f950722
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP015",
+ "setting_id": "GFSEP015_00",
+ "name": "Eolas Prints TPU D60 UV Resistant @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_tpu",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["TPU"],
+ "nozzle_temperature": ["225"],
+ "nozzle_temperature_initial_layer": ["230"],
+ "nozzle_temperature_range_low": ["215"],
+ "nozzle_temperature_range_high": ["245"],
+ "hot_plate_temp": ["55"],
+ "hot_plate_temp_initial_layer": ["60"],
+ "filament_density": ["1.16"],
+ "filament_cost": ["37.90"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["8"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json
new file mode 100644
index 0000000000..c1029399d4
--- /dev/null
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json
@@ -0,0 +1,22 @@
+{
+ "type": "filament",
+ "filament_id": "GFSEP016",
+ "setting_id": "GFSEP016_00",
+ "name": "Eolas Prints TPU Transition @System",
+ "from": "system",
+ "instantiation": "true",
+ "inherits": "fdm_filament_tpu",
+ "filament_color": ["#4d9398"],
+ "filament_vendor": ["Eolas Prints"],
+ "filament_type": ["TPU"],
+ "nozzle_temperature": ["220"],
+ "nozzle_temperature_initial_layer": ["225"],
+ "nozzle_temperature_range_low": ["210"],
+ "nozzle_temperature_range_high": ["240"],
+ "hot_plate_temp": ["50"],
+ "hot_plate_temp_initial_layer": ["55"],
+ "filament_density": ["1.21"],
+ "filament_cost": ["22.50"],
+ "filament_spool_weight": ["1000"],
+ "filament_max_volumetric_speed": ["5"]
+}
\ No newline at end of file
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @System.json
similarity index 60%
rename from resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json
rename to resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @System.json
index 96e40e373f..bbb5b658f6 100644
--- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @System.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @System.json
@@ -1,7 +1,8 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @System",
- "inherits": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @System",
+ "renamed_from": "Panchroma PLA Stain @System",
+ "inherits": "Panchroma PLA Satin @base",
"from": "system",
"setting_id": "OGFSPM005",
"instantiation": "true",
@@ -11,4 +12,4 @@
"filament_max_volumetric_speed": [
"16"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json
similarity index 87%
rename from resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json
rename to resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json
index 4021abe0c3..a3ae93632b 100644
--- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Stain @base.json
+++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json
@@ -1,6 +1,7 @@
{
"type": "filament",
- "name": "Panchroma PLA Stain @base",
+ "name": "Panchroma PLA Satin @base",
+ "renamed_from": "Panchroma PLA Stain @base",
"inherits": "fdm_filament_pla",
"from": "system",
"filament_id": "OGFPM005",
@@ -32,4 +33,4 @@
"temperature_vitrification": [
"59"
]
-}
\ No newline at end of file
+}
diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json
index 6f7bd1649a..b63413d8ce 100644
--- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json
+++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json
@@ -94,6 +94,9 @@
],
"z_hop": [
"0.2"
+ ],
+ "machine_max_junction_deviation": [
+ "0.01"
],
"fan_speedup_time": "0.2",
"fan_speedup_overhangs": "1",
@@ -102,7 +105,7 @@
"printable_height": "180",
"machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X170 Y170 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+50, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM572 S0 ; reset PA\nM569 S1 X Y ; reset to stealthchop for X Y\nM84 ; disable motors\n; max_layer_z = [max_layer_z]",
"machine_pause_gcode": "M601",
- "machine_start_gcode": "M862.3 P \"MINI\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.0.3+14902\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nG28 ; home all without mesh bed level\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow",
+ "machine_start_gcode": "M862.3 P \"MINI\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.4.0+11974\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nG28 ; home all without mesh bed level\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))} Y{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))}",
"change_filament_gcode": "M600",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\n{if ! spiral_mode}M74 W[extruded_weight_total]{endif}\n",
diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json
index 8d5307d1a8..18576df366 100644
--- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json
+++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json
@@ -95,6 +95,9 @@
"z_hop": [
"0.2"
],
+ "machine_max_junction_deviation": [
+ "0.01"
+ ],
"fan_speedup_time": "0.2",
"fan_speedup_overhangs": "1",
"fan_kickstart": "0",
@@ -102,7 +105,7 @@
"printable_height": "210",
"machine_end_gcode": "{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y201 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z]",
"machine_pause_gcode": "M601",
- "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK3.5\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.2.2+8853\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nG28 ; home all\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n",
+ "machine_start_gcode": "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P \"MK3.5\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.4.0+11974\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nG28 ; home all\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n",
"change_filament_gcode": "M600",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\n{if ! spiral_mode}M74 W[extruded_weight_total]{endif}\n",
diff --git a/resources/profiles/Prusa/process/0.05mm DETAIL @CORE One 0.25.json b/resources/profiles/Prusa/process/0.05mm DETAIL @CORE One 0.25.json
index 90282356ee..5a5e94e124 100644
--- a/resources/profiles/Prusa/process/0.05mm DETAIL @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.05mm DETAIL @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "gap_infill_speed": "45",
+ "small_perimeter_speed": "45",
+ "outer_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json
index 9f2b524b57..6298c71d49 100644
--- a/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json
@@ -19,6 +19,9 @@
"top_shell_layers": "13",
"bottom_shell_thickness": "0.5",
"bottom_shell_layers": "10",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.05mm Detail @MK3.5.json b/resources/profiles/Prusa/process/0.05mm Detail @MK3.5.json
index 9f82ceb6eb..a9a79b47a1 100644
--- a/resources/profiles/Prusa/process/0.05mm Detail @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.05mm Detail @MK3.5.json
@@ -19,7 +19,9 @@
"top_shell_layers": "13",
"bottom_shell_thickness": "0.5",
"bottom_shell_layers": "10",
+ "support_base_pattern_spacing": "1",
"support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.07mm DETAIL @CORE One 0.25.json b/resources/profiles/Prusa/process/0.07mm DETAIL @CORE One 0.25.json
index aa1fb6b9f7..cda4e3096b 100644
--- a/resources/profiles/Prusa/process/0.07mm DETAIL @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.07mm DETAIL @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "gap_infill_speed": "45",
+ "small_perimeter_speed": "45",
+ "outer_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json
index 9217fc2f00..63d1757fd0 100644
--- a/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json
@@ -21,7 +21,9 @@
"bottom_shell_layers": "8",
"bridge_speed": "30",
"internal_solid_infill_speed": "140",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.07mm Detail @MK3.5.json b/resources/profiles/Prusa/process/0.07mm Detail @MK3.5.json
index 6fc9c6886c..eb90dc1922 100644
--- a/resources/profiles/Prusa/process/0.07mm Detail @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.07mm Detail @MK3.5.json
@@ -21,7 +21,9 @@
"bottom_shell_layers": "8",
"bridge_speed": "30",
"internal_solid_infill_speed": "140",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.10mm FAST DETAIL @CORE One 0.4.json b/resources/profiles/Prusa/process/0.10mm FAST DETAIL @CORE One 0.4.json
index d481f3139d..b2c2ca9528 100644
--- a/resources/profiles/Prusa/process/0.10mm FAST DETAIL @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.10mm FAST DETAIL @CORE One 0.4.json
@@ -13,5 +13,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "100",
"initial_layer_speed": "45",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4",
+ "small_perimeter_speed": "145",
+ "inner_wall_speed": "145",
+ "outer_wall_speed": "145"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.10mm STRUCTURAL @CORE One 0.5.json b/resources/profiles/Prusa/process/0.10mm STRUCTURAL @CORE One 0.5.json
index f5f6a460b0..df335dbe67 100644
--- a/resources/profiles/Prusa/process/0.10mm STRUCTURAL @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.10mm STRUCTURAL @CORE One 0.5.json
@@ -4,9 +4,9 @@
"inherits": "0.10mm STRUCTURAL @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "inner_wall_speed": "80",
- "small_perimeter_speed": "45",
- "outer_wall_speed": "45",
+ "inner_wall_speed": "70",
+ "small_perimeter_speed": "50",
+ "outer_wall_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json
index b8107625fa..6a87714bb0 100644
--- a/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json
@@ -24,7 +24,9 @@
"internal_solid_infill_acceleration": "3000",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MINIIS 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.10mm Speed @MK3.5.json b/resources/profiles/Prusa/process/0.10mm Speed @MK3.5.json
index 92d201b8e1..7327e51e82 100644
--- a/resources/profiles/Prusa/process/0.10mm Speed @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.10mm Speed @MK3.5.json
@@ -24,7 +24,9 @@
"internal_solid_infill_acceleration": "3000",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MK3.5 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.12mm SPEED @CORE One 0.25.json b/resources/profiles/Prusa/process/0.12mm SPEED @CORE One 0.25.json
index 69ef541dae..3fc92e8b42 100644
--- a/resources/profiles/Prusa/process/0.12mm SPEED @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.12mm SPEED @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "small_perimeter_speed": "150",
+ "outer_wall_speed": "150",
+ "inner_wall_speed": "150"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.25.json b/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.25.json
index a61d130cb5..ec754dc350 100644
--- a/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "gap_infill_speed": "45",
+ "small_perimeter_speed": "45",
+ "outer_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.3.json b/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.3.json
index 35b0d2c525..101e7f0968 100644
--- a/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.3.json
+++ b/resources/profiles/Prusa/process/0.12mm STRUCTURAL @CORE One 0.3.json
@@ -12,5 +12,8 @@
"initial_layer_infill_speed": "60",
"initial_layer_speed": "45",
"top_surface_acceleration": "1500",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3",
+ "small_perimeter_speed": "45",
+ "inner_wall_speed": "70",
+ "outer_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json
index e8518fdb25..c4d772993f 100644
--- a/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json
@@ -31,7 +31,8 @@
"overhang_1_4_speed": "60",
"internal_solid_infill_acceleration": "2500",
"sparse_infill_acceleration": "2500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.12mm Speed @MK3.5.json b/resources/profiles/Prusa/process/0.12mm Speed @MK3.5.json
index abaef8f727..76ce6b9221 100644
--- a/resources/profiles/Prusa/process/0.12mm Speed @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.12mm Speed @MK3.5.json
@@ -31,7 +31,8 @@
"overhang_1_4_speed": "60",
"internal_solid_infill_acceleration": "2500",
"sparse_infill_acceleration": "2500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json
index f0d03268c4..72175e280d 100644
--- a/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json
@@ -36,7 +36,9 @@
"internal_solid_infill_acceleration": "2500",
"sparse_infill_acceleration": "2500",
"travel_acceleration": "3000",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.12mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.12mm Standard @MK3.5.json
index 6099147be4..8f4b41b380 100644
--- a/resources/profiles/Prusa/process/0.12mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.12mm Standard @MK3.5.json
@@ -36,7 +36,9 @@
"internal_solid_infill_acceleration": "2500",
"sparse_infill_acceleration": "2500",
"travel_acceleration": "3000",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm High Flow @MINIIS.json b/resources/profiles/Prusa/process/0.15mm High Flow @MINIIS.json
index 58a8211986..81711734a1 100644
--- a/resources/profiles/Prusa/process/0.15mm High Flow @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.15mm High Flow @MINIIS.json
@@ -29,7 +29,8 @@
"inner_wall_acceleration": "3500",
"outer_wall_acceleration": "2500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MINIIS 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm High Flow @MK3.5.json b/resources/profiles/Prusa/process/0.15mm High Flow @MK3.5.json
index 92db093a4c..a3ecfea49b 100644
--- a/resources/profiles/Prusa/process/0.15mm High Flow @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.15mm High Flow @MK3.5.json
@@ -29,7 +29,8 @@
"inner_wall_acceleration": "3500",
"outer_wall_acceleration": "2500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MK3.5 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.25.json b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.25.json
index 8e5f0cab2d..4600a136a8 100644
--- a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "small_perimeter_speed": "150",
+ "inner_wall_speed": "150",
+ "outer_wall_speed": "150"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.4.json b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.4.json
index 2c3b531050..e08b21a26f 100644
--- a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.15mm SPEED @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -16,5 +16,6 @@
"internal_solid_infill_acceleration": "6000",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "support_threshold_angle": "35"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One HF 0.4.json b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One HF 0.4.json
index fa9fb8c30c..50ad496cd2 100644
--- a/resources/profiles/Prusa/process/0.15mm SPEED @CORE One HF 0.4.json
+++ b/resources/profiles/Prusa/process/0.15mm SPEED @CORE One HF 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.15mm SPEED @MK4S HF0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_1_4_speed": "50",
"overhang_3_4_speed": "60%",
"sparse_infill_speed": "300",
"travel_speed": "350",
@@ -18,5 +18,6 @@
"internal_solid_infill_acceleration": "6000",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "support_threshold_angle": "35"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.25.json b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.25.json
index 55e9dc654c..51886f189e 100644
--- a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.25.json
@@ -10,5 +10,8 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "45",
"initial_layer_speed": "25",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.25",
+ "gap_infill_speed": "45",
+ "small_perimeter_speed": "45",
+ "outer_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.4.json b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.4.json
index fd2d410e48..017b232df4 100644
--- a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.15mm STRUCTURAL @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"sparse_infill_speed": "120",
"travel_speed": "350",
"travel_acceleration": "7000",
diff --git a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.5.json b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.5.json
index 2cecda0dd0..765d0efa49 100644
--- a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.15mm STRUCTURAL @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.6.json b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.6.json
index 2f58de84e9..0024001fd9 100644
--- a/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.15mm STRUCTURAL @CORE One 0.6.json
@@ -4,9 +4,9 @@
"inherits": "0.15mm STRUCTURAL @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "inner_wall_speed": "80",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "inner_wall_speed": "70",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -18,5 +18,6 @@
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.6",
"inner_wall_acceleration": "2500",
"outer_wall_acceleration": "1500",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "gap_infill_speed": "70"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json
index 30d9a165d5..3aa3019d76 100644
--- a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS 0.25.json
@@ -29,7 +29,8 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json
index 853e0e01e6..6f6a9cffcd 100644
--- a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json
@@ -29,7 +29,8 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MINIIS 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MK3.5 0.25.json b/resources/profiles/Prusa/process/0.15mm Speed @MK3.5 0.25.json
index 09c562d356..e322f1ce63 100644
--- a/resources/profiles/Prusa/process/0.15mm Speed @MK3.5 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm Speed @MK3.5 0.25.json
@@ -29,7 +29,8 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_interface_spacing": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MK3.5.json b/resources/profiles/Prusa/process/0.15mm Speed @MK3.5.json
index 175c896845..31eb1443bb 100644
--- a/resources/profiles/Prusa/process/0.15mm Speed @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.15mm Speed @MK3.5.json
@@ -29,7 +29,8 @@
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_interface_spacing": "0.17",
"compatible_printers": [
"Prusa MK3.5 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json
index b6fe166ce1..362ed653d2 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.25.json
@@ -29,7 +29,9 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MINIIS 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json
index 606e52ecb7..5cd6746563 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS 0.6.json
@@ -37,7 +37,10 @@
"inner_wall_acceleration": "2500",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json
index 3f1a5c6825..d61a785155 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json
@@ -33,7 +33,8 @@
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MINIIS 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.25.json b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.25.json
index eca3cdad8c..3d55cc1e39 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.25.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.25.json
@@ -29,7 +29,9 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "1",
+ "support_top_z_distance": "0.09",
+ "support_bottom_z_distance": "0.09",
"compatible_printers": [
"Prusa MK3.5 0.25 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.6.json b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.6.json
index 6c6a80a261..c0087d57ea 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.6.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5 0.6.json
@@ -37,7 +37,11 @@
"inner_wall_acceleration": "2500",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5.json
index 4044df4712..e6161e5896 100644
--- a/resources/profiles/Prusa/process/0.15mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.15mm Standard @MK3.5.json
@@ -28,7 +28,8 @@
"internal_solid_infill_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
- "support_top_z_distance": "0.1",
+ "support_top_z_distance": "0.17",
+ "support_bottom_z_distance": "0.17",
"compatible_printers": [
"Prusa MK3.5 0.4 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.16mm SPEED @CORE One 0.3.json b/resources/profiles/Prusa/process/0.16mm SPEED @CORE One 0.3.json
index d0ca7859df..15096ebd6b 100644
--- a/resources/profiles/Prusa/process/0.16mm SPEED @CORE One 0.3.json
+++ b/resources/profiles/Prusa/process/0.16mm SPEED @CORE One 0.3.json
@@ -13,5 +13,8 @@
"initial_layer_infill_speed": "60",
"initial_layer_speed": "45",
"top_surface_acceleration": "1500",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3",
+ "small_perimeter_speed": "160",
+ "inner_wall_speed": "160",
+ "outer_wall_speed": "160"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.16mm STRUCTURAL @CORE One 0.3.json b/resources/profiles/Prusa/process/0.16mm STRUCTURAL @CORE One 0.3.json
index 192682e5b7..4e11371cfe 100644
--- a/resources/profiles/Prusa/process/0.16mm STRUCTURAL @CORE One 0.3.json
+++ b/resources/profiles/Prusa/process/0.16mm STRUCTURAL @CORE One 0.3.json
@@ -12,5 +12,8 @@
"initial_layer_infill_speed": "60",
"initial_layer_speed": "45",
"top_surface_acceleration": "1500",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3",
+ "small_perimeter_speed": "50",
+ "inner_wall_speed": "70",
+ "outer_wall_speed": "50"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm High Flow @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.20mm High Flow @MINIIS 0.6.json
index aeca348889..15363df16c 100644
--- a/resources/profiles/Prusa/process/0.20mm High Flow @MINIIS 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm High Flow @MINIIS 0.6.json
@@ -36,5 +36,10 @@
"outer_wall_acceleration": "4000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
- "overhang_1_4_speed": "45"
+ "overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm High Flow @MK3.5 0.6.json b/resources/profiles/Prusa/process/0.20mm High Flow @MK3.5 0.6.json
index 2aa0d96b93..c9056822db 100644
--- a/resources/profiles/Prusa/process/0.20mm High Flow @MK3.5 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm High Flow @MK3.5 0.6.json
@@ -36,5 +36,10 @@
"outer_wall_acceleration": "4000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
- "overhang_1_4_speed": "45"
+ "overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SOLUBLE FULL @CORE One 0.4.json b/resources/profiles/Prusa/process/0.20mm SOLUBLE FULL @CORE One 0.4.json
index 3fe89b38a6..7e0f0042c0 100644
--- a/resources/profiles/Prusa/process/0.20mm SOLUBLE FULL @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.20mm SOLUBLE FULL @CORE One 0.4.json
@@ -4,12 +4,15 @@
"inherits": "0.20mm SOLUBLE FULL @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4 and printer_notes!~/.*HF_NOZZLE.*/",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "100",
- "initial_layer_speed": "45"
+ "initial_layer_speed": "45",
+ "small_perimeter_speed": "50",
+ "inner_wall_speed": "70",
+ "outer_wall_speed": "50"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SOLUBLE INTERFACE @CORE One 0.4.json b/resources/profiles/Prusa/process/0.20mm SOLUBLE INTERFACE @CORE One 0.4.json
index 49c4c28280..222663644c 100644
--- a/resources/profiles/Prusa/process/0.20mm SOLUBLE INTERFACE @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.20mm SOLUBLE INTERFACE @CORE One 0.4.json
@@ -4,12 +4,15 @@
"inherits": "0.20mm SOLUBLE INTERFACE @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4 and printer_notes!~/.*HF_NOZZLE.*/",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "100",
- "initial_layer_speed": "45"
+ "initial_layer_speed": "45",
+ "small_perimeter_speed": "50",
+ "inner_wall_speed": "70",
+ "outer_wall_speed": "50"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.3.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.3.json
index df4d8e80cc..0f0cc78362 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.3.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.3.json
@@ -13,5 +13,8 @@
"initial_layer_infill_speed": "60",
"initial_layer_speed": "45",
"top_surface_acceleration": "1500",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3",
+ "small_perimeter_speed": "160",
+ "inner_wall_speed": "160",
+ "outer_wall_speed": "160"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.4.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.4.json
index 9171ec4b21..79cd06680f 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm SPEED @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -16,5 +16,6 @@
"internal_solid_infill_acceleration": "6000",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "support_threshold_angle": "35"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.5.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.5.json
index e7299809ea..20d64e324c 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm SPEED @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.6.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.6.json
index 78446c1687..1bbd442a02 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One 0.6.json
@@ -4,8 +4,8 @@
"inherits": "0.20mm SPEED @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -17,5 +17,8 @@
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.6 and printer_notes!~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "small_perimeter_speed": "130",
+ "inner_wall_speed": "130",
+ "outer_wall_speed": "130"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.4.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.4.json
index 96433e26e8..5b9b42f34c 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.4.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.4.json
@@ -4,8 +4,8 @@
"inherits": "0.20mm SPEED @MK4S HF0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
- "overhang_3_4_speed": "60%",
+ "overhang_3_4_speed": "50",
+ "overhang_4_4_speed": "70%",
"sparse_infill_speed": "300",
"travel_speed": "350",
"travel_acceleration": "7000",
@@ -18,5 +18,6 @@
"internal_solid_infill_acceleration": "6000",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "support_threshold_angle": "35"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.5.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.5.json
index 3ad26d4548..c7324713ea 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.5.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm SPEED @MK4S HF0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.6.json
index 204f356661..8cb0eb8f1c 100644
--- a/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm SPEED @CORE One HF 0.6.json
@@ -4,8 +4,8 @@
"inherits": "0.20mm SPEED @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.3.json b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.3.json
index e7dd110d1d..d9b1a2ef54 100644
--- a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.3.json
+++ b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.3.json
@@ -12,5 +12,8 @@
"initial_layer_infill_speed": "60",
"initial_layer_speed": "45",
"top_surface_acceleration": "1500",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.3",
+ "small_perimeter_speed": "50",
+ "inner_wall_speed": "70",
+ "outer_wall_speed": "50"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.4.json b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.4.json
index 95d97fea4e..a139f2cd4f 100644
--- a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.4.json
+++ b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm STRUCTURAL @MK4S 0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.5.json b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.5.json
index c6fba65551..57c2968e0d 100644
--- a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm STRUCTURAL @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.6.json b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.6.json
index 5445f967b5..9bbd5097c8 100644
--- a/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm STRUCTURAL @CORE One 0.6.json
@@ -4,7 +4,7 @@
"inherits": "0.20mm STRUCTURAL @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "30",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json
index 2e2cb971fe..29f9977358 100644
--- a/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS 0.6.json
@@ -34,5 +34,10 @@
"outer_wall_acceleration": "2000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
- "overhang_1_4_speed": "45"
+ "overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3.5 0.6.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3.5 0.6.json
index fb256ecc05..79c38ffeea 100644
--- a/resources/profiles/Prusa/process/0.20mm Speed @MK3.5 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3.5 0.6.json
@@ -34,5 +34,10 @@
"outer_wall_acceleration": "2000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
- "overhang_1_4_speed": "45"
+ "overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json
index 6ed283fa8c..d27e89b756 100644
--- a/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS 0.6.json
@@ -29,6 +29,11 @@
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
"overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MK3.5 0.6.json b/resources/profiles/Prusa/process/0.20mm Standard @MK3.5 0.6.json
index f6e1946a04..e4b4f4b5d1 100644
--- a/resources/profiles/Prusa/process/0.20mm Standard @MK3.5 0.6.json
+++ b/resources/profiles/Prusa/process/0.20mm Standard @MK3.5 0.6.json
@@ -29,6 +29,11 @@
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
"overhang_1_4_speed": "45",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm High Flow @MINIIS.json b/resources/profiles/Prusa/process/0.25mm High Flow @MINIIS.json
index 4521f5fbb1..f1784af6c5 100644
--- a/resources/profiles/Prusa/process/0.25mm High Flow @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.25mm High Flow @MINIIS.json
@@ -40,7 +40,11 @@
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
"overhang_1_4_speed": "45",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm High Flow @MK3.5.json b/resources/profiles/Prusa/process/0.25mm High Flow @MK3.5.json
index 00faf7f563..0cb9257ddf 100644
--- a/resources/profiles/Prusa/process/0.25mm High Flow @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.25mm High Flow @MK3.5.json
@@ -40,7 +40,11 @@
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
"overhang_1_4_speed": "45",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.5.json b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.5.json
index bfe931bc62..cb087eb345 100644
--- a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.25mm SPEED @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.6.json b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.6.json
index 4cd0500e7b..621c94e9d8 100644
--- a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One 0.6.json
@@ -4,8 +4,8 @@
"inherits": "0.25mm SPEED @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -17,5 +17,8 @@
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.6 and printer_notes!~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "small_perimeter_speed": "75",
+ "inner_wall_speed": "95",
+ "outer_wall_speed": "75"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.4.json b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.4.json
index b0b066e261..634c502f73 100644
--- a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.4.json
+++ b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.4.json
@@ -4,8 +4,8 @@
"inherits": "0.25mm SPEED @MK4S HF0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
- "overhang_3_4_speed": "60%",
+ "overhang_3_4_speed": "50",
+ "overhang_4_4_speed": "70%",
"sparse_infill_speed": "300",
"travel_speed": "350",
"travel_acceleration": "7000",
@@ -13,10 +13,11 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "100",
"initial_layer_speed": "45",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*HF_NOZZLE.*/",
+"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*HF_NOZZLE.*/",
"sparse_infill_acceleration": "7000",
"internal_solid_infill_acceleration": "6000",
"inner_wall_acceleration": "6000",
"outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "top_surface_acceleration": "2000",
+ "support_threshold_angle": "35"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.5.json b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.5.json
index 20634c06e1..268891fb46 100644
--- a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.5.json
+++ b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.25mm SPEED @MK4S HF0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.6.json
index 493f82b29b..bb26e69f5d 100644
--- a/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.25mm SPEED @CORE One HF 0.6.json
@@ -4,8 +4,8 @@
"inherits": "0.25mm SPEED @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.5.json b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.5.json
index a89610e3ee..c4d22efeb2 100644
--- a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.5.json
+++ b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.25mm STRUCTURAL @MK4S 0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.6.json b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.6.json
index 5418273bb2..96a614266d 100644
--- a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One 0.6.json
@@ -4,7 +4,7 @@
"inherits": "0.25mm STRUCTURAL @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "30",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One HF 0.4.json b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One HF 0.4.json
index 6392a2c0f7..978f3f94d0 100644
--- a/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One HF 0.4.json
+++ b/resources/profiles/Prusa/process/0.25mm STRUCTURAL @CORE One HF 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.25mm STRUCTURAL @MK4S HF0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json
index c5085cbf7c..33e3de92dc 100644
--- a/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json
@@ -30,7 +30,11 @@
"overhang_1_4_speed": "45",
"travel_speed": "300",
"internal_solid_infill_acceleration": "3000",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm Speed @MK3.5.json b/resources/profiles/Prusa/process/0.25mm Speed @MK3.5.json
index 6dec0d7f5c..7ebe2664ef 100644
--- a/resources/profiles/Prusa/process/0.25mm Speed @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.25mm Speed @MK3.5.json
@@ -30,7 +30,11 @@
"overhang_1_4_speed": "45",
"travel_speed": "300",
"internal_solid_infill_acceleration": "3000",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json
index e98b851fc4..4191366100 100644
--- a/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json
@@ -29,7 +29,11 @@
"gap_infill_speed": "60",
"support_speed": "80",
"travel_speed": "300",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.25mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.25mm Standard @MK3.5.json
index e9c0451d61..64e099d97e 100644
--- a/resources/profiles/Prusa/process/0.25mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.25mm Standard @MK3.5.json
@@ -29,7 +29,11 @@
"gap_infill_speed": "60",
"support_speed": "80",
"travel_speed": "300",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.28mm DRAFT @CORE One HF 0.4.json b/resources/profiles/Prusa/process/0.28mm DRAFT @CORE One HF 0.4.json
index a1f896b3c0..e493e19467 100644
--- a/resources/profiles/Prusa/process/0.28mm DRAFT @CORE One HF 0.4.json
+++ b/resources/profiles/Prusa/process/0.28mm DRAFT @CORE One HF 0.4.json
@@ -4,7 +4,7 @@
"inherits": "0.28mm DRAFT @MK4S HF0.4",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"support_threshold_angle": "35",
"outer_wall_acceleration": "3000",
"inner_wall_acceleration": "6000",
diff --git a/resources/profiles/Prusa/process/0.30mm DETAIL @CORE One 0.8.json b/resources/profiles/Prusa/process/0.30mm DETAIL @CORE One 0.8.json
index 0ecac72e60..db88957c69 100644
--- a/resources/profiles/Prusa/process/0.30mm DETAIL @CORE One 0.8.json
+++ b/resources/profiles/Prusa/process/0.30mm DETAIL @CORE One 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.30mm DETAIL @MK4S 0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "35",
+ "top_surface_acceleration": "2000",
"inner_wall_acceleration": "2500",
"internal_solid_infill_acceleration": "5000",
"sparse_infill_acceleration": "7000",
@@ -15,5 +15,6 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "55",
"initial_layer_speed": "45",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes!~/.*HF_NOZZLE.*/"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes!~/.*HF_NOZZLE.*/",
+ "gap_infill_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json
index 90a7a28fb8..dcc20a87bd 100644
--- a/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json
@@ -21,7 +21,11 @@
"bottom_shell_thickness": "0.5",
"bottom_shell_layers": "2",
"travel_speed": "300",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MINIIS 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.30mm Detail @MK3.5.json b/resources/profiles/Prusa/process/0.30mm Detail @MK3.5.json
index 7d4ed7d622..975851d38f 100644
--- a/resources/profiles/Prusa/process/0.30mm Detail @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.30mm Detail @MK3.5.json
@@ -21,7 +21,11 @@
"bottom_shell_thickness": "0.5",
"bottom_shell_layers": "2",
"travel_speed": "300",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MK3.5 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.30mm SPEED @CORE One HF 0.8.json b/resources/profiles/Prusa/process/0.30mm SPEED @CORE One HF 0.8.json
index 8477a7c0f9..d4be25be9a 100644
--- a/resources/profiles/Prusa/process/0.30mm SPEED @CORE One HF 0.8.json
+++ b/resources/profiles/Prusa/process/0.30mm SPEED @CORE One HF 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.30mm SPEED @MK4S HF0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "45",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.30mm STRUCTURAL @CORE One HF 0.8.json b/resources/profiles/Prusa/process/0.30mm STRUCTURAL @CORE One HF 0.8.json
index d8cb0916af..7426aa3a21 100644
--- a/resources/profiles/Prusa/process/0.30mm STRUCTURAL @CORE One HF 0.8.json
+++ b/resources/profiles/Prusa/process/0.30mm STRUCTURAL @CORE One HF 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.30mm STRUCTURAL @MK4S HF0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "40",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "40",
+ "top_surface_acceleration": "2000",
"support_speed": "100",
"support_interface_speed": "55%",
"travel_speed": "350",
@@ -18,6 +18,5 @@
"sparse_infill_acceleration": "6000",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes=~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "2500",
- "outer_wall_acceleration": "1500",
- "top_surface_acceleration": "2000"
+ "outer_wall_acceleration": "1500"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.32mm High Flow @MINIIS.json b/resources/profiles/Prusa/process/0.32mm High Flow @MINIIS.json
index a1fbbc989f..7602017ccd 100644
--- a/resources/profiles/Prusa/process/0.32mm High Flow @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.32mm High Flow @MINIIS.json
@@ -37,7 +37,11 @@
"outer_wall_acceleration": "4000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.32mm High Flow @MK3.5.json b/resources/profiles/Prusa/process/0.32mm High Flow @MK3.5.json
index 43a0733ac4..b295a0b1b3 100644
--- a/resources/profiles/Prusa/process/0.32mm High Flow @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.32mm High Flow @MK3.5.json
@@ -39,7 +39,11 @@
"outer_wall_acceleration": "4000",
"bridge_acceleration": "1500",
"internal_solid_infill_acceleration": "3000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One 0.6.json b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One 0.6.json
index 549b62c466..8b4b7511b1 100644
--- a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One 0.6.json
@@ -4,8 +4,8 @@
"inherits": "0.32mm SPEED @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
- "overhang_3_4_speed": "70%",
+ "overhang_3_4_speed": "30",
+ "overhang_4_4_speed": "70%",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.5.json b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.5.json
index 1471abb700..55594a5dd2 100644
--- a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.5.json
+++ b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.32mm SPEED @MK4S HF0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "50",
+ "overhang_3_4_speed": "50",
"support_interface_speed": "50%",
"travel_speed": "350",
"travel_acceleration": "7000",
diff --git a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.6.json
index e9bde33023..533da07e95 100644
--- a/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.32mm SPEED @CORE One HF 0.6.json
@@ -4,9 +4,9 @@
"inherits": "0.32mm SPEED @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
- "overhang_3_4_speed": "70%",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "35",
+ "overhang_4_4_speed": "70%",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -17,6 +17,5 @@
"sparse_infill_acceleration": "7000",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "6000",
- "outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "outer_wall_acceleration": "3000"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One 0.6.json b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One 0.6.json
index e52aa90a5f..a652b7097c 100644
--- a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One 0.6.json
+++ b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One 0.6.json
@@ -4,7 +4,7 @@
"inherits": "0.32mm STRUCTURAL @MK4S 0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "30",
+ "overhang_3_4_speed": "30",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.5.json b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.5.json
index a1f851d518..7fb4500b02 100644
--- a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.5.json
+++ b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.5.json
@@ -4,7 +4,7 @@
"inherits": "0.32mm STRUCTURAL @MK4S HF0.5",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
+ "overhang_3_4_speed": "45",
"support_speed": "120",
"support_interface_speed": "50%",
"travel_speed": "350",
diff --git a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.6.json
index 2a3f2ce950..887768ee8e 100644
--- a/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.32mm STRUCTURAL @CORE One HF 0.6.json
@@ -4,7 +4,7 @@
"inherits": "0.32mm STRUCTURAL @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
+ "overhang_3_4_speed": "35",
"support_speed": "110",
"support_interface_speed": "50%",
"travel_speed": "350",
diff --git a/resources/profiles/Prusa/process/0.32mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.32mm Standard @MINIIS.json
index 411a870db7..c1edeeb9eb 100644
--- a/resources/profiles/Prusa/process/0.32mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.32mm Standard @MINIIS.json
@@ -30,7 +30,11 @@
"top_surface_speed": "55",
"gap_infill_speed": "45",
"travel_speed": "300",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.32mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.32mm Standard @MK3.5.json
index 1f4001c0fb..5674aed58e 100644
--- a/resources/profiles/Prusa/process/0.32mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.32mm Standard @MK3.5.json
@@ -30,7 +30,11 @@
"top_surface_speed": "55",
"gap_infill_speed": "45",
"travel_speed": "300",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json
index bb7145adc8..edc3044976 100644
--- a/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json
@@ -30,7 +30,11 @@
"top_surface_speed": "55",
"gap_infill_speed": "45",
"travel_speed": "300",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MINIIS 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.35mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.35mm Standard @MK3.5.json
index 9ff6c800c2..82e2034788 100644
--- a/resources/profiles/Prusa/process/0.35mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.35mm Standard @MK3.5.json
@@ -30,7 +30,11 @@
"top_surface_speed": "55",
"gap_infill_speed": "45",
"travel_speed": "300",
- "support_top_z_distance": "0.25",
+ "support_base_pattern_spacing": "2",
+ "support_top_z_distance": "0.22",
+ "support_bottom_z_distance": "0.22",
+ "support_bottom_interface_spacing": "0.22",
+ "support_interface_spacing": "0.25",
"compatible_printers": [
"Prusa MK3.5 0.6 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.40mm High Flow @MINIIS.json b/resources/profiles/Prusa/process/0.40mm High Flow @MINIIS.json
index 593fda4beb..ea55022d19 100644
--- a/resources/profiles/Prusa/process/0.40mm High Flow @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.40mm High Flow @MINIIS.json
@@ -41,7 +41,11 @@
"inner_wall_acceleration": "3000",
"outer_wall_acceleration": "2500",
"bridge_acceleration": "1000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MINIIS 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.40mm High Flow @MK3.5.json b/resources/profiles/Prusa/process/0.40mm High Flow @MK3.5.json
index 056c8cb2be..79fda27a93 100644
--- a/resources/profiles/Prusa/process/0.40mm High Flow @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.40mm High Flow @MK3.5.json
@@ -41,7 +41,11 @@
"inner_wall_acceleration": "3000",
"outer_wall_acceleration": "2500",
"bridge_acceleration": "1000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MK3.5 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.40mm QUALITY @CORE One 0.8.json b/resources/profiles/Prusa/process/0.40mm QUALITY @CORE One 0.8.json
index 4567cd1dd7..a92c5eb3dd 100644
--- a/resources/profiles/Prusa/process/0.40mm QUALITY @CORE One 0.8.json
+++ b/resources/profiles/Prusa/process/0.40mm QUALITY @CORE One 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.40mm QUALITY @MK4S 0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "35",
+ "top_surface_acceleration": "2000",
"inner_wall_acceleration": "2500",
"internal_solid_infill_acceleration": "5000",
"sparse_infill_acceleration": "7000",
diff --git a/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.6.json
index e0b870c9ad..bb913bcabd 100644
--- a/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.6.json
@@ -4,9 +4,9 @@
"inherits": "0.40mm SPEED @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
- "overhang_3_4_speed": "70%",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "35",
+ "overhang_4_4_speed": "70%",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -17,6 +17,5 @@
"sparse_infill_acceleration": "7000",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "6000",
- "outer_wall_acceleration": "3000",
- "top_surface_acceleration": "2000"
+ "outer_wall_acceleration": "3000"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.8.json b/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.8.json
index 142556619a..7e6f2c156c 100644
--- a/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.8.json
+++ b/resources/profiles/Prusa/process/0.40mm SPEED @CORE One HF 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.40mm SPEED @MK4S HF0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "45",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -14,5 +14,7 @@
"initial_layer_speed": "45",
"internal_solid_infill_acceleration": "5000",
"sparse_infill_acceleration": "7000",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes=~/.*HF_NOZZLE.*/"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes=~/.*HF_NOZZLE.*/",
+ "small_perimeter_speed": "85",
+ "outer_wall_speed": "85"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.6.json b/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.6.json
index adfba858f2..fe8697d887 100644
--- a/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.6.json
+++ b/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.6.json
@@ -4,7 +4,7 @@
"inherits": "0.40mm STRUCTURAL @MK4S HF0.6",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "35",
+ "overhang_3_4_speed": "35",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.8.json b/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.8.json
index e651c26ce3..6fbe39f6ba 100644
--- a/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.8.json
+++ b/resources/profiles/Prusa/process/0.40mm STRUCTURAL @CORE One HF 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.40mm STRUCTURAL @MK4S HF0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "40",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "40",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
@@ -16,6 +16,5 @@
"sparse_infill_acceleration": "6000",
"compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes=~/.*HF_NOZZLE.*/",
"inner_wall_acceleration": "2500",
- "outer_wall_acceleration": "1500",
- "top_surface_acceleration": "2000"
+ "outer_wall_acceleration": "1500"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json
index c040568d16..a29bbbdbbe 100644
--- a/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json
+++ b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json
@@ -40,7 +40,11 @@
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MINIIS 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.40mm Standard @MK3.5.json b/resources/profiles/Prusa/process/0.40mm Standard @MK3.5.json
index 31fddc238b..41659260f1 100644
--- a/resources/profiles/Prusa/process/0.40mm Standard @MK3.5.json
+++ b/resources/profiles/Prusa/process/0.40mm Standard @MK3.5.json
@@ -41,7 +41,11 @@
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1500",
"bridge_acceleration": "1000",
+ "support_base_pattern_spacing": "2",
"support_top_z_distance": "0.25",
+ "support_bottom_z_distance": "0.25",
+ "support_bottom_interface_spacing": "0.25",
+ "support_interface_spacing": "0.35",
"compatible_printers": [
"Prusa MK3.5 0.8 nozzle"
]
diff --git a/resources/profiles/Prusa/process/0.55mm DRAFT @CORE One 0.8.json b/resources/profiles/Prusa/process/0.55mm DRAFT @CORE One 0.8.json
index 6037cbdbda..5d350f3738 100644
--- a/resources/profiles/Prusa/process/0.55mm DRAFT @CORE One 0.8.json
+++ b/resources/profiles/Prusa/process/0.55mm DRAFT @CORE One 0.8.json
@@ -4,7 +4,7 @@
"inherits": "0.55mm DRAFT @MK4S 0.8",
"from": "system",
"instantiation": "true",
- "top_surface_speed": "2000",
+ "top_surface_acceleration": "2000",
"inner_wall_acceleration": "2500",
"internal_solid_infill_acceleration": "5000",
"sparse_infill_acceleration": "7000",
@@ -14,5 +14,6 @@
"support_interface_top_layers": "3",
"initial_layer_infill_speed": "55",
"initial_layer_speed": "45",
- "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes!~/.*HF_NOZZLE.*/"
+ "compatible_printers_condition": "printer_notes=~/.*PRINTER_MODEL_COREONE.*/ and nozzle_diameter[0]==0.8 and printer_notes!~/.*HF_NOZZLE.*/",
+ "inner_wall_speed": "45"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/0.55mm SPEED @CORE One HF 0.8.json b/resources/profiles/Prusa/process/0.55mm SPEED @CORE One HF 0.8.json
index 11b159f114..f9270671a2 100644
--- a/resources/profiles/Prusa/process/0.55mm SPEED @CORE One HF 0.8.json
+++ b/resources/profiles/Prusa/process/0.55mm SPEED @CORE One HF 0.8.json
@@ -4,8 +4,8 @@
"inherits": "0.55mm SPEED @MK4S HF0.8",
"from": "system",
"instantiation": "true",
- "overhang_2_4_speed": "45",
- "top_surface_speed": "2000",
+ "overhang_3_4_speed": "45",
+ "top_surface_acceleration": "2000",
"travel_speed": "350",
"travel_acceleration": "7000",
"default_acceleration": "3000",
diff --git a/resources/profiles/Prusa/process/process_common_MK3.5.json b/resources/profiles/Prusa/process/process_common_MK3.5.json
index a5471d2bf6..4873772bf7 100644
--- a/resources/profiles/Prusa/process/process_common_MK3.5.json
+++ b/resources/profiles/Prusa/process/process_common_MK3.5.json
@@ -55,10 +55,13 @@
"raft_contact_distance": "0.15",
"raft_expansion": "1.5",
"raft_first_layer_density": "90%",
- "raft_first_layer_expansion": "3.5",
"support_threshold_angle": "40",
"support_interface_bottom_layers": "0",
"support_base_pattern": "rectilinear",
"support_interface_top_layers": "3",
- "support_top_z_distance": "0.17"
+ "raft_first_layer_expansion": "3",
+ "support_base_pattern_spacing": "2",
+ "support_bottom_interface_spacing": "0.2",
+ "support_interface_spacing": "0.2",
+ "support_top_z_distance": "0.2"
}
\ No newline at end of file
diff --git a/resources/profiles/Prusa/process/process_common_miniis.json b/resources/profiles/Prusa/process/process_common_miniis.json
index 443fae9dc3..533d660224 100644
--- a/resources/profiles/Prusa/process/process_common_miniis.json
+++ b/resources/profiles/Prusa/process/process_common_miniis.json
@@ -55,10 +55,13 @@
"raft_contact_distance": "0.15",
"raft_expansion": "1.5",
"raft_first_layer_density": "90%",
- "raft_first_layer_expansion": "3.5",
"support_threshold_angle": "40",
"support_interface_bottom_layers": "0",
"support_base_pattern": "rectilinear",
"support_interface_top_layers": "3",
- "support_top_z_distance": "0.17"
+ "raft_first_layer_expansion": "3",
+ "support_base_pattern_spacing": "2",
+ "support_bottom_interface_spacing": "0.2",
+ "support_interface_spacing": "0.2",
+ "support_top_z_distance": "0.2"
}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json
index e5b3b2b155..a468a8edf1 100644
--- a/resources/profiles/Snapmaker.json
+++ b/resources/profiles/Snapmaker.json
@@ -462,7 +462,7 @@
"filament_list": [
{
"name": "PolyTerra PLA @0.2 nozzle",
- "sub_path": "filament/PolyTerra PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyTerra PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Lite @U1 base",
@@ -482,11 +482,11 @@
},
{
"name": "PolyTerra Dual PLA @0.2 nozzle",
- "sub_path": "filament/PolyTerra Dual PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json"
},
{
"name": "PolyTerra J1 PLA @0.2 nozzle",
- "sub_path": "filament/PolyTerra J1 PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker PLA Lite @U1",
@@ -608,6 +608,14 @@
"name": "Snapmaker PET @base",
"sub_path": "filament/Snapmaker PET @base.json"
},
+ {
+ "name": "PolyLite PETG @Base",
+ "sub_path": "filament/Polymaker/PolyLite PETG @Base.json"
+ },
+ {
+ "name": "Polymaker PETG @Base",
+ "sub_path": "filament/Polymaker/Polymaker PETG @Base.json"
+ },
{
"name": "Snapmaker Dual PETG @base",
"sub_path": "filament/Snapmaker Dual PETG @base.json"
@@ -640,17 +648,105 @@
"name": "Snapmaker PETG-CF @base",
"sub_path": "filament/Snapmaker PETG-CF @base.json"
},
+ {
+ "name": "Panchroma CoPE @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma CoPE @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Celestial @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Celestial @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Galaxy @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Glow @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Glow @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Luminous @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Luminous @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Marble @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Marble @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Matte @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Matte @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Metallic @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Metallic @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Neon @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Neon @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Silk @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Silk @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Starlight @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Starlight @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Temp Shift @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA Translucent @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA Translucent @U1 base.json"
+ },
+ {
+ "name": "Panchroma PLA UV Shift @U1 base",
+ "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @U1 base.json"
+ },
{
"name": "PolyLite PLA @U1 base",
- "sub_path": "filament/PolyLite PLA @U1 base.json"
+ "sub_path": "filament/Polymaker/PolyLite PLA @U1 base.json"
},
{
"name": "PolyLite PLA @base",
- "sub_path": "filament/PolyLite PLA @base.json"
+ "sub_path": "filament/Polymaker/PolyLite PLA @base.json"
+ },
+ {
+ "name": "PolyLite PLA Pro @U1 base",
+ "sub_path": "filament/Polymaker/PolyLite PLA Pro @U1 base.json"
},
{
"name": "PolyTerra PLA @U1 base",
- "sub_path": "filament/PolyTerra PLA @U1 base.json"
+ "sub_path": "filament/Polymaker/PolyTerra PLA @U1 base.json"
+ },
+ {
+ "name": "Polymaker HT-PLA @Base",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA @Base.json"
+ },
+ {
+ "name": "Polymaker HT-PLA @U1 base",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA @U1 base.json"
+ },
+ {
+ "name": "Polymaker HT-PLA-GF @Base",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @Base.json"
+ },
+ {
+ "name": "Polymaker HT-PLA-GF @U1 base",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @U1 base.json"
+ },
+ {
+ "name": "Polymaker PLA Pro @Base",
+ "sub_path": "filament/Polymaker/Polymaker PLA Pro @Base.json"
},
{
"name": "Snapmaker Dual PLA @base",
@@ -884,6 +980,14 @@
"name": "Snapmaker PET",
"sub_path": "filament/Snapmaker PET.json"
},
+ {
+ "name": "PolyLite PETG @Snapmaker U1",
+ "sub_path": "filament/Polymaker/PolyLite PETG @Snapmaker U1.json"
+ },
+ {
+ "name": "Polymaker PETG @Snapmaker U1",
+ "sub_path": "filament/Polymaker/Polymaker PETG @Snapmaker U1.json"
+ },
{
"name": "Snapmaker Dual PETG",
"sub_path": "filament/Snapmaker Dual PETG.json"
@@ -936,21 +1040,109 @@
"name": "Snapmaker PETG-CF",
"sub_path": "filament/Snapmaker PETG-CF.json"
},
+ {
+ "name": "Panchroma CoPE @U1",
+ "sub_path": "filament/Polymaker/Panchroma CoPE @U1.json"
+ },
+ {
+ "name": "Panchroma PLA @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Celestial @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Celestial @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Galaxy @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Galaxy @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Glow @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Glow @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Luminous @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Luminous @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Marble @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Marble @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Matte @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Matte @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Metallic @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Metallic @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Neon @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Neon @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Satin @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Satin @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Silk @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Silk @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Starlight @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Starlight @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Temp Shift @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Temp Shift @U1.json"
+ },
+ {
+ "name": "Panchroma PLA Translucent @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA Translucent @U1.json"
+ },
+ {
+ "name": "Panchroma PLA UV Shift @U1",
+ "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @U1.json"
+ },
{
"name": "PolyLite PLA @U1",
- "sub_path": "filament/PolyLite PLA @U1.json"
+ "sub_path": "filament/Polymaker/PolyLite PLA @U1.json"
},
{
"name": "PolyLite J1 PLA",
- "sub_path": "filament/PolyLite J1 PLA.json"
+ "sub_path": "filament/Polymaker/PolyLite J1 PLA.json"
},
{
"name": "PolyLite PLA @0.2 nozzle",
- "sub_path": "filament/PolyLite PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyLite PLA @0.2 nozzle.json"
+ },
+ {
+ "name": "PolyLite PLA Pro @U1",
+ "sub_path": "filament/Polymaker/PolyLite PLA Pro @U1.json"
},
{
"name": "PolyTerra PLA @U1",
- "sub_path": "filament/PolyTerra PLA @U1.json"
+ "sub_path": "filament/Polymaker/PolyTerra PLA @U1.json"
+ },
+ {
+ "name": "Polymaker HT-PLA @Snapmaker U1",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA @Snapmaker U1.json"
+ },
+ {
+ "name": "Polymaker HT-PLA @U1",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA @U1.json"
+ },
+ {
+ "name": "Polymaker HT-PLA-GF @Snapmaker U1",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1.json"
+ },
+ {
+ "name": "Polymaker HT-PLA-GF @U1",
+ "sub_path": "filament/Polymaker/Polymaker HT-PLA-GF @U1.json"
+ },
+ {
+ "name": "Polymaker PLA Pro @Snapmaker U1",
+ "sub_path": "filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json"
},
{
"name": "Snapmaker Dual PLA",
@@ -1158,11 +1350,11 @@
},
{
"name": "PolyLite Dual PLA @0.2 nozzle",
- "sub_path": "filament/PolyLite Dual PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json"
},
{
"name": "PolyLite J1 PLA @0.2 nozzle",
- "sub_path": "filament/PolyLite J1 PLA @0.2 nozzle.json"
+ "sub_path": "filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json"
},
{
"name": "Snapmaker Dual PLA Eco",
@@ -1206,7 +1398,7 @@
},
{
"name": "PolyTerra J1 PLA",
- "sub_path": "filament/PolyTerra J1 PLA.json"
+ "sub_path": "filament/Polymaker/PolyTerra J1 PLA.json"
},
{
"name": "Snapmaker PLA Matte @U1 base",
diff --git a/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json
deleted file mode 100644
index 6528cd8ca0..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite Dual PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite Dual PLA @0.2 nozzle",
- "inherits": "PolyLite PLA @0.2 nozzle",
- "from": "system",
- "setting_id": "490991920",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker A250 Dual (0.2 nozzle)",
- "Snapmaker A250 Dual BKit (0.2 nozzle)",
- "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
- "Snapmaker A250 Dual QSKit (0.2 nozzle)",
- "Snapmaker A350 Dual (0.2 nozzle)",
- "Snapmaker A350 Dual BKit (0.2 nozzle)",
- "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
- "Snapmaker A350 Dual QSKit (0.2 nozzle)",
- "Snapmaker Artisan (0.2 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyLite J1 PLA @0.2 nozzle.json
deleted file mode 100644
index 65a87c28d8..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite J1 PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite J1 PLA @0.2 nozzle",
- "inherits": "PolyLite PLA @0.2 nozzle",
- "from": "system",
- "setting_id": "431382384",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker J1 (0.2 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite J1 PLA.json b/resources/profiles/Snapmaker/filament/PolyLite J1 PLA.json
deleted file mode 100644
index 0d09c5528a..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite J1 PLA.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite J1 PLA",
- "inherits": "PolyLite PLA @base",
- "from": "system",
- "setting_id": "116125055",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker J1 (0.4 nozzle)",
- "Snapmaker J1 (0.6 nozzle)",
- "Snapmaker J1 (0.8 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json
deleted file mode 100644
index 69999b740a..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite PLA @0.2 nozzle",
- "inherits": "PolyLite PLA @base",
- "from": "system",
- "setting_id": "1592803578",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker A250 (0.2 nozzle)",
- "Snapmaker A250 BKit (0.2 nozzle)",
- "Snapmaker A250 QS+B Kit (0.2 nozzle)",
- "Snapmaker A250 QSKit (0.2 nozzle)",
- "Snapmaker A350 (0.2 nozzle)",
- "Snapmaker A350 BKit (0.2 nozzle)",
- "Snapmaker A350 QS+B Kit (0.2 nozzle)",
- "Snapmaker A350 QSKit (0.2 nozzle)"
- ],
- "filament_max_volumetric_speed": [
- "1.6"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA @U1 base.json b/resources/profiles/Snapmaker/filament/PolyLite PLA @U1 base.json
deleted file mode 100644
index fb9c55cdc7..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite PLA @U1 base.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite PLA @U1 base",
- "inherits": "fdm_filament_pla",
- "from": "system",
- "filament_id": "13938660340",
- "instantiation": "false",
- "filament_flow_ratio": [
- "0.95"
- ],
- "filament_cost": [
- "90"
- ],
- "filament_max_volumetric_speed": [
- "15"
- ],
- "default_filament_colour": [
- ""
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA @U1.json b/resources/profiles/Snapmaker/filament/PolyLite PLA @U1.json
deleted file mode 100644
index 0648fdde39..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite PLA @U1.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite PLA @U1",
- "inherits": "PolyLite PLA @U1 base",
- "from": "system",
- "setting_id": "6486836500",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker U1 (0.4 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/PolyLite PLA @base.json
deleted file mode 100644
index e4db1c70b6..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyLite PLA @base.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "type": "filament",
- "name": "PolyLite PLA @base",
- "inherits": "fdm_filament_pla",
- "from": "system",
- "filament_id": "1393866034",
- "instantiation": "false",
- "filament_flow_ratio": [
- "0.95"
- ],
- "filament_cost": [
- "90"
- ],
- "filament_max_volumetric_speed": [
- "15"
- ],
- "default_filament_colour": [
- ""
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json
deleted file mode 100644
index 9ce3e9f972..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra Dual PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra Dual PLA @0.2 nozzle",
- "inherits": "PolyTerra PLA @0.2 nozzle",
- "from": "system",
- "setting_id": "1258531391",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker A250 Dual (0.2 nozzle)",
- "Snapmaker A250 Dual BKit (0.2 nozzle)",
- "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
- "Snapmaker A250 Dual QSKit (0.2 nozzle)",
- "Snapmaker A350 Dual (0.2 nozzle)",
- "Snapmaker A350 Dual BKit (0.2 nozzle)",
- "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
- "Snapmaker A350 Dual QSKit (0.2 nozzle)",
- "Snapmaker Artisan (0.2 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA @0.2 nozzle.json
deleted file mode 100644
index a2f99fd132..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra J1 PLA @0.2 nozzle",
- "inherits": "PolyTerra PLA @0.2 nozzle",
- "from": "system",
- "setting_id": "1072374370",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker J1 (0.2 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA.json
deleted file mode 100644
index c696f52735..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra J1 PLA.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra J1 PLA",
- "inherits": "PolyTerra PLA @base",
- "from": "system",
- "setting_id": "3958200796",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker J1 (0.4 nozzle)",
- "Snapmaker J1 (0.6 nozzle)",
- "Snapmaker J1 (0.8 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json
deleted file mode 100644
index f996844ce1..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra PLA @0.2 nozzle.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra PLA @0.2 nozzle",
- "inherits": "PolyTerra PLA @base",
- "from": "system",
- "setting_id": "409934824",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker A250 (0.2 nozzle)",
- "Snapmaker A250 BKit (0.2 nozzle)",
- "Snapmaker A250 QS+B Kit (0.2 nozzle)",
- "Snapmaker A250 QSKit (0.2 nozzle)",
- "Snapmaker A350 (0.2 nozzle)",
- "Snapmaker A350 BKit (0.2 nozzle)",
- "Snapmaker A350 QS+B Kit (0.2 nozzle)",
- "Snapmaker A350 QSKit (0.2 nozzle)"
- ],
- "filament_max_volumetric_speed": [
- "1.4"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1 base.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1 base.json
deleted file mode 100644
index 3b7b9a8b94..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1 base.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra PLA @U1 base",
- "inherits": "fdm_filament_pla",
- "from": "system",
- "filament_id": "37895926870",
- "instantiation": "false",
- "filament_cost": [
- "80"
- ],
- "filament_density": [
- "1.31"
- ],
- "filament_max_volumetric_speed": [
- "14.4"
- ],
- "default_filament_colour": [
- ""
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1.json b/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1.json
deleted file mode 100644
index 478c008d7a..0000000000
--- a/resources/profiles/Snapmaker/filament/PolyTerra PLA @U1.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "type": "filament",
- "name": "PolyTerra PLA @U1",
- "inherits": "PolyTerra PLA @U1 base",
- "from": "system",
- "setting_id": "12580059400",
- "instantiation": "true",
- "compatible_printers": [
- "Snapmaker U1 (0.4 nozzle)"
- ]
-}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1 base.json
new file mode 100644
index 0000000000..1575543964
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma CoPE @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM016",
+ "instantiation": "false",
+ "filament_cost": [
+ "19.99"
+ ],
+ "filament_density": [
+ "1.29"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "230"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "230"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "58"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1.json
new file mode 100644
index 0000000000..abd252e87a
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma CoPE @U1",
+ "inherits": "Panchroma CoPE @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM016_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1 base.json
new file mode 100644
index 0000000000..a09edc3df1
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1 base.json
@@ -0,0 +1,44 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM001",
+ "instantiation": "false",
+ "filament_cost": [
+ "19.99"
+ ],
+ "filament_density": [
+ "1.32"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "filament_wipe": [
+ "0"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "58"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1.json
new file mode 100644
index 0000000000..a77038834b
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA @U1",
+ "inherits": "Panchroma PLA @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM001_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1 base.json
new file mode 100644
index 0000000000..305c3b8476
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Celestial @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM008",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1.json
new file mode 100644
index 0000000000..cfd1b918b1
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Celestial @U1",
+ "inherits": "Panchroma PLA Celestial @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM008_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1 base.json
new file mode 100644
index 0000000000..9129ce17a7
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Galaxy @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM007",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1.json
new file mode 100644
index 0000000000..465e8b461d
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Galaxy @U1",
+ "inherits": "Panchroma PLA Galaxy @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM007_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1 base.json
new file mode 100644
index 0000000000..21177be0db
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Glow @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM010",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1.json
new file mode 100644
index 0000000000..5cbf021349
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Glow @U1",
+ "inherits": "Panchroma PLA Glow @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM010_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1 base.json
new file mode 100644
index 0000000000..c8afc7bc16
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Luminous @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM011",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1.json
new file mode 100644
index 0000000000..7747c1ccfb
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Luminous @U1",
+ "inherits": "Panchroma PLA Luminous @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM011_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1 base.json
new file mode 100644
index 0000000000..8a462959a8
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Marble @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM003",
+ "instantiation": "false",
+ "filament_cost": [
+ "21.99"
+ ],
+ "filament_density": [
+ "1.31"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1.json
new file mode 100644
index 0000000000..8fb2780b8f
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @U1.json
@@ -0,0 +1,23 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Marble @U1",
+ "inherits": "Panchroma PLA Marble @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM003_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1 base.json
new file mode 100644
index 0000000000..9ab72e1484
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Matte @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM002",
+ "instantiation": "false",
+ "filament_cost": [
+ "20.99"
+ ],
+ "filament_density": [
+ "1.31"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1.json
new file mode 100644
index 0000000000..9823adaa0c
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @U1.json
@@ -0,0 +1,23 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Matte @U1",
+ "inherits": "Panchroma PLA Matte @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM002_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1 base.json
new file mode 100644
index 0000000000..f9a33ba035
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Metallic @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM012",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1.json
new file mode 100644
index 0000000000..0196929a54
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Metallic @U1",
+ "inherits": "Panchroma PLA Metallic @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM012_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1 base.json
new file mode 100644
index 0000000000..70332dc961
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Neon @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM013",
+ "instantiation": "false",
+ "filament_cost": [
+ "24.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1.json
new file mode 100644
index 0000000000..cc5ab3fbaf
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Neon @U1",
+ "inherits": "Panchroma PLA Neon @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM013_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1 base.json
new file mode 100644
index 0000000000..1f38ea1a45
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1 base.json
@@ -0,0 +1,42 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Satin @U1 base",
+ "renamed_from": "Panchroma PLA Stain @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM005",
+ "instantiation": "false",
+ "filament_cost": [
+ "20.99"
+ ],
+ "filament_density": [
+ "1.24"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "230"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "230"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "59"
+ ]
+}
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1.json
new file mode 100644
index 0000000000..6e914b56a4
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @U1.json
@@ -0,0 +1,27 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Satin @U1",
+ "renamed_from": "Panchroma PLA Stain @U1",
+ "inherits": "Panchroma PLA Satin @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM005_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1 base.json
new file mode 100644
index 0000000000..43e9f98164
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Silk @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM004",
+ "instantiation": "false",
+ "filament_cost": [
+ "24.99"
+ ],
+ "filament_density": [
+ "1.31"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "230"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "230"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "58"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1.json
new file mode 100644
index 0000000000..52102ab63b
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Silk @U1",
+ "inherits": "Panchroma PLA Silk @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM004_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1 base.json
new file mode 100644
index 0000000000..0c9fd9bf52
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Starlight @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM009",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1.json
new file mode 100644
index 0000000000..9029dc250c
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Starlight @U1",
+ "inherits": "Panchroma PLA Starlight @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM009_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1 base.json
new file mode 100644
index 0000000000..c86779555f
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Temp Shift @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM015",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1.json
new file mode 100644
index 0000000000..5d7e17696b
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Temp Shift @U1",
+ "inherits": "Panchroma PLA Temp Shift @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM015_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1 base.json
new file mode 100644
index 0000000000..cb786e6f9a
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Translucent @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM006",
+ "instantiation": "false",
+ "filament_cost": [
+ "24.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1.json
new file mode 100644
index 0000000000..6e35878869
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA Translucent @U1",
+ "inherits": "Panchroma PLA Translucent @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM006_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1 base.json
new file mode 100644
index 0000000000..c209198398
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA UV Shift @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM014",
+ "instantiation": "false",
+ "filament_cost": [
+ "29.99"
+ ],
+ "filament_density": [
+ "1.17"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "240"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1.json
new file mode 100644
index 0000000000..f85802624c
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Panchroma PLA UV Shift @U1",
+ "inherits": "Panchroma PLA UV Shift @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM014_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..f47614d710
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyLite Dual PLA @0.2 nozzle",
+ "setting_id": "490991920",
+ "inherits": "PolyLite PLA @0.2 nozzle",
+ "compatible_printers": [
+ "Snapmaker A250 Dual (0.2 nozzle)",
+ "Snapmaker A250 Dual BKit (0.2 nozzle)",
+ "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
+ "Snapmaker A250 Dual QSKit (0.2 nozzle)",
+ "Snapmaker A350 Dual (0.2 nozzle)",
+ "Snapmaker A350 Dual BKit (0.2 nozzle)",
+ "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
+ "Snapmaker A350 Dual QSKit (0.2 nozzle)",
+ "Snapmaker Artisan (0.2 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..4e2b21f785
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyLite J1 PLA @0.2 nozzle",
+ "setting_id": "431382384",
+ "inherits": "PolyLite PLA @0.2 nozzle",
+ "compatible_printers": [
+ "Snapmaker J1 (0.2 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json
new file mode 100644
index 0000000000..ac3cdd9ba9
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyLite J1 PLA",
+ "setting_id": "116125055",
+ "inherits": "PolyLite PLA @base",
+ "compatible_printers": [
+ "Snapmaker J1 (0.4 nozzle)",
+ "Snapmaker J1 (0.6 nozzle)",
+ "Snapmaker J1 (0.8 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json
new file mode 100644
index 0000000000..ed8ea01808
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json
@@ -0,0 +1,29 @@
+{
+ "filament_density": [
+ "1.25"
+ ],
+ "temp_min": [
+ "230"
+ ],
+ "temp_max": [
+ "240"
+ ],
+ "temperture_vitrification": [
+ "75"
+ ],
+ "idle_temperture": [
+ "0"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "description": "",
+ "inherits": "fdm_filament_petg",
+ "name": "PolyLite PETG @Base",
+ "type": "filament",
+ "instantiation": "false",
+ "from": "system",
+ "filament_vendor": [
+ "Polymaker"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json
new file mode 100644
index 0000000000..2e8a0e0943
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json
@@ -0,0 +1,117 @@
+{
+ "type": "filament",
+ "name": "PolyLite PETG @Snapmaker U1",
+ "from": "system",
+ "instantiation": "true",
+ "cool_plate_temp": [
+ "60"
+ ],
+ "eng_plate_temp": [
+ "0"
+ ],
+ "hot_plate_temp": [
+ "80"
+ ],
+ "textured_plate_temp": [
+ "80"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "60"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "0"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "80"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "80"
+ ],
+ "overhang_fan_threshold": [
+ "95%"
+ ],
+ "overhang_fan_speed": [
+ "100"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode \n"
+ ],
+ "filament_flow_ratio": [
+ "0.92"
+ ],
+ "fan_cooling_layer_time": [
+ "20"
+ ],
+ "filament_cost": [
+ "0"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_max_volumetric_speed": [
+ "7.5"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "bed_type": [
+ "Cool Plate"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "260"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "fan_max_speed": [
+ "40"
+ ],
+ "fan_min_speed": [
+ "0"
+ ],
+ "slow_down_min_speed": [
+ "10"
+ ],
+ "slow_down_layer_time": [
+ "6"
+ ],
+ "filament_start_gcode": [
+ "; Filament gcode\n"
+ ],
+ "nozzle_temperature": [
+ "260"
+ ],
+ "temperature_vitrification": [
+ "81"
+ ],
+ "filament_id": "PMPE04",
+ "nozzle_temperature_range_high": [
+ "260"
+ ],
+ "nozzle_temperature_range_low": [
+ "230"
+ ],
+ "supertack_plate_temp": [
+ "70"
+ ],
+ "supertack_plate_temp_initial_layer": [
+ "70"
+ ],
+ "setting_id": "PMPE04_U1",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "pressure_advance": [
+ "0.05"
+ ],
+ "inherits": "PolyLite PETG @Base"
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..b3c643a042
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json
@@ -0,0 +1,21 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyLite PLA @0.2 nozzle",
+ "setting_id": "1592803578",
+ "inherits": "PolyLite PLA @base",
+ "compatible_printers": [
+ "Snapmaker A250 (0.2 nozzle)",
+ "Snapmaker A250 BKit (0.2 nozzle)",
+ "Snapmaker A250 QS+B Kit (0.2 nozzle)",
+ "Snapmaker A250 QSKit (0.2 nozzle)",
+ "Snapmaker A350 (0.2 nozzle)",
+ "Snapmaker A350 BKit (0.2 nozzle)",
+ "Snapmaker A350 QS+B Kit (0.2 nozzle)",
+ "Snapmaker A350 QSKit (0.2 nozzle)"
+ ],
+ "filament_max_volumetric_speed": [
+ "1.6"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1 base.json
new file mode 100644
index 0000000000..d0547572b6
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1 base.json
@@ -0,0 +1,20 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "false",
+ "name": "PolyLite PLA @U1 base",
+ "filament_id": "13938660340",
+ "inherits": "fdm_filament_pla",
+ "filament_flow_ratio": [
+ "0.95"
+ ],
+ "filament_cost": [
+ "90"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "default_filament_colour": [
+ ""
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1.json
new file mode 100644
index 0000000000..ad81f2d79d
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @U1.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyLite PLA @U1",
+ "setting_id": "6486836500",
+ "inherits": "PolyLite PLA @U1 base",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json
new file mode 100644
index 0000000000..2a7310f405
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json
@@ -0,0 +1,20 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "false",
+ "name": "PolyLite PLA @base",
+ "filament_id": "1393866034",
+ "inherits": "fdm_filament_pla",
+ "filament_flow_ratio": [
+ "0.95"
+ ],
+ "filament_cost": [
+ "90"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "default_filament_colour": [
+ ""
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1 base.json
new file mode 100644
index 0000000000..f5d87e4277
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1 base.json
@@ -0,0 +1,41 @@
+{
+ "type": "filament",
+ "name": "PolyLite PLA Pro @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM019",
+ "instantiation": "false",
+ "filament_cost": [
+ "24.99"
+ ],
+ "filament_density": [
+ "1.22"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "220"
+ ],
+ "nozzle_temperature_range_low": [
+ "190"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "62"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1.json
new file mode 100644
index 0000000000..f0b65f7717
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "PolyLite PLA Pro @U1",
+ "inherits": "PolyLite PLA Pro @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM019_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..c3673b4d3c
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyTerra Dual PLA @0.2 nozzle",
+ "setting_id": "1258531391",
+ "inherits": "PolyTerra PLA @0.2 nozzle",
+ "compatible_printers": [
+ "Snapmaker A250 Dual (0.2 nozzle)",
+ "Snapmaker A250 Dual BKit (0.2 nozzle)",
+ "Snapmaker A250 Dual QS+B Kit (0.2 nozzle)",
+ "Snapmaker A250 Dual QSKit (0.2 nozzle)",
+ "Snapmaker A350 Dual (0.2 nozzle)",
+ "Snapmaker A350 Dual BKit (0.2 nozzle)",
+ "Snapmaker A350 Dual QS+B Kit (0.2 nozzle)",
+ "Snapmaker A350 Dual QSKit (0.2 nozzle)",
+ "Snapmaker Artisan (0.2 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..24fda4c652
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyTerra J1 PLA @0.2 nozzle",
+ "setting_id": "1072374370",
+ "inherits": "PolyTerra PLA @0.2 nozzle",
+ "compatible_printers": [
+ "Snapmaker J1 (0.2 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json
new file mode 100644
index 0000000000..9592d5cbd0
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json
@@ -0,0 +1,13 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyTerra J1 PLA",
+ "setting_id": "3958200796",
+ "inherits": "PolyTerra PLA @base",
+ "compatible_printers": [
+ "Snapmaker J1 (0.4 nozzle)",
+ "Snapmaker J1 (0.6 nozzle)",
+ "Snapmaker J1 (0.8 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json
new file mode 100644
index 0000000000..215685b8e3
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json
@@ -0,0 +1,21 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyTerra PLA @0.2 nozzle",
+ "setting_id": "409934824",
+ "inherits": "PolyTerra PLA @base",
+ "compatible_printers": [
+ "Snapmaker A250 (0.2 nozzle)",
+ "Snapmaker A250 BKit (0.2 nozzle)",
+ "Snapmaker A250 QS+B Kit (0.2 nozzle)",
+ "Snapmaker A250 QSKit (0.2 nozzle)",
+ "Snapmaker A350 (0.2 nozzle)",
+ "Snapmaker A350 BKit (0.2 nozzle)",
+ "Snapmaker A350 QS+B Kit (0.2 nozzle)",
+ "Snapmaker A350 QSKit (0.2 nozzle)"
+ ],
+ "filament_max_volumetric_speed": [
+ "1.4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1 base.json
new file mode 100644
index 0000000000..861179ca06
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1 base.json
@@ -0,0 +1,20 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "false",
+ "name": "PolyTerra PLA @U1 base",
+ "filament_id": "37895926870",
+ "inherits": "fdm_filament_pla",
+ "filament_cost": [
+ "80"
+ ],
+ "filament_density": [
+ "1.31"
+ ],
+ "filament_max_volumetric_speed": [
+ "14.4"
+ ],
+ "default_filament_colour": [
+ ""
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1.json
new file mode 100644
index 0000000000..f77d1d8082
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @U1.json
@@ -0,0 +1,11 @@
+{
+ "type": "filament",
+ "from": "system",
+ "instantiation": "true",
+ "name": "PolyTerra PLA @U1",
+ "setting_id": "12580059400",
+ "inherits": "PolyTerra PLA @U1 base",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json
new file mode 100644
index 0000000000..77e155ade4
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json
@@ -0,0 +1,29 @@
+{
+ "filament_density": [
+ "1.28"
+ ],
+ "temp_min": [
+ "210"
+ ],
+ "temp_max": [
+ "230"
+ ],
+ "temperture_vitrification": [
+ "156"
+ ],
+ "idle_temperture": [
+ "0"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "description": "",
+ "inherits": "fdm_filament_pla",
+ "name": "Polymaker HT-PLA @Base",
+ "type": "filament",
+ "instantiation": "false",
+ "from": "system",
+ "filament_vendor": [
+ "Polymaker"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1.json
new file mode 100644
index 0000000000..b466d702fe
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1.json
@@ -0,0 +1,96 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA @Snapmaker U1",
+ "from": "system",
+ "instantiation": "true",
+ "cool_plate_temp": [
+ "50"
+ ],
+ "eng_plate_temp": [
+ "50"
+ ],
+ "hot_plate_temp": [
+ "65"
+ ],
+ "textured_plate_temp": [
+ "50"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "50"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "50"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "65"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "50"
+ ],
+ "overhang_fan_threshold": [
+ "50%"
+ ],
+ "overhang_fan_speed": [
+ "100"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode \n"
+ ],
+ "filament_flow_ratio": [
+ "0.96"
+ ],
+ "filament_cost": [
+ "0"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "bed_type": [
+ "Cool Plate"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "slow_down_min_speed": [
+ "5"
+ ],
+ "slow_down_layer_time": [
+ "6"
+ ],
+ "filament_start_gcode": [
+ "; filament start gcode\n"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "temperature_vitrification": [
+ "60"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ],
+ "setting_id": "PMPL02_U1",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "inherits": "Polymaker HT-PLA @Base",
+ "filament_id": "PMPL02"
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1 base.json
new file mode 100644
index 0000000000..9a997d8e3f
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1 base.json
@@ -0,0 +1,53 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM017",
+ "instantiation": "false",
+ "filament_cost": [
+ "26.99"
+ ],
+ "filament_density": [
+ "1.28"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "hot_plate_temp": [
+ "65"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "65"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "nozzle_temperature_range_low": [
+ "210"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "60"
+ ],
+ "textured_plate_temp": [
+ "65"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "65"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1.json
new file mode 100644
index 0000000000..da678d8a4c
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA @U1",
+ "inherits": "Polymaker HT-PLA @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM017_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json
new file mode 100644
index 0000000000..4cd066b3d0
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json
@@ -0,0 +1,29 @@
+{
+ "filament_density": [
+ "1.34"
+ ],
+ "temp_min": [
+ "210"
+ ],
+ "temp_max": [
+ "230"
+ ],
+ "temperture_vitrification": [
+ "148"
+ ],
+ "idle_temperture": [
+ "0"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "description": "",
+ "inherits": "fdm_filament_pla",
+ "name": "Polymaker HT-PLA-GF @Base",
+ "type": "filament",
+ "instantiation": "false",
+ "from": "system",
+ "filament_vendor": [
+ "Polymaker"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1.json
new file mode 100644
index 0000000000..b18f79d461
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1.json
@@ -0,0 +1,96 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA-GF @Snapmaker U1",
+ "from": "system",
+ "instantiation": "true",
+ "cool_plate_temp": [
+ "50"
+ ],
+ "eng_plate_temp": [
+ "50"
+ ],
+ "hot_plate_temp": [
+ "65"
+ ],
+ "textured_plate_temp": [
+ "50"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "50"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "50"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "65"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "50"
+ ],
+ "overhang_fan_threshold": [
+ "50%"
+ ],
+ "overhang_fan_speed": [
+ "100"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode \n"
+ ],
+ "filament_flow_ratio": [
+ "1.04"
+ ],
+ "filament_cost": [
+ "0"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "bed_type": [
+ "Cool Plate"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "slow_down_min_speed": [
+ "5"
+ ],
+ "slow_down_layer_time": [
+ "6"
+ ],
+ "filament_start_gcode": [
+ "; filament start gcode\n"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "temperature_vitrification": [
+ "60"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ],
+ "setting_id": "PMPL01_U1",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "inherits": "Polymaker HT-PLA-GF @Base",
+ "filament_id": "PMPL01"
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1 base.json
new file mode 100644
index 0000000000..fb70c1df40
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1 base.json
@@ -0,0 +1,53 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA-GF @U1 base",
+ "inherits": "fdm_filament_pla",
+ "from": "system",
+ "filament_id": "GFPM018",
+ "instantiation": "false",
+ "filament_cost": [
+ "32.99"
+ ],
+ "filament_density": [
+ "1.34"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "hot_plate_temp": [
+ "65"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "65"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "nozzle_temperature_range_low": [
+ "210"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ],
+ "temperature_vitrification": [
+ "60"
+ ],
+ "textured_plate_temp": [
+ "65"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "65"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1.json
new file mode 100644
index 0000000000..554d1452be
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @U1.json
@@ -0,0 +1,26 @@
+{
+ "type": "filament",
+ "name": "Polymaker HT-PLA-GF @U1",
+ "inherits": "Polymaker HT-PLA-GF @U1 base",
+ "from": "system",
+ "setting_id": "GFSPM018_00",
+ "instantiation": "true",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "fan_min_speed": [
+ "100"
+ ],
+ "filament_flow_ratio": [
+ "0.98"
+ ],
+ "filament_max_volumetric_speed": [
+ "20"
+ ],
+ "slow_down_layer_time": [
+ "4"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json
new file mode 100644
index 0000000000..04b25b012d
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json
@@ -0,0 +1,29 @@
+{
+ "filament_density": [
+ "1.3"
+ ],
+ "temp_min": [
+ "240"
+ ],
+ "temp_max": [
+ "260"
+ ],
+ "temperture_vitrification": [
+ "75"
+ ],
+ "idle_temperture": [
+ "0"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "description": "",
+ "inherits": "fdm_filament_petg",
+ "name": "Polymaker PETG @Base",
+ "type": "filament",
+ "instantiation": "false",
+ "from": "system",
+ "filament_vendor": [
+ "Polymaker"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1.json
new file mode 100644
index 0000000000..c7559a65f7
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1.json
@@ -0,0 +1,111 @@
+{
+ "type": "filament",
+ "name": "Polymaker PETG @Snapmaker U1",
+ "from": "system",
+ "instantiation": "true",
+ "cool_plate_temp": [
+ "60"
+ ],
+ "eng_plate_temp": [
+ "0"
+ ],
+ "hot_plate_temp": [
+ "80"
+ ],
+ "textured_plate_temp": [
+ "80"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "60"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "0"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "80"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "80"
+ ],
+ "overhang_fan_threshold": [
+ "95%"
+ ],
+ "overhang_fan_speed": [
+ "100"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode \n"
+ ],
+ "filament_flow_ratio": [
+ "0.96"
+ ],
+ "filament_cost": [
+ "0"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "bed_type": [
+ "Cool Plate"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "260"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "fan_max_speed": [
+ "10"
+ ],
+ "fan_min_speed": [
+ "50"
+ ],
+ "slow_down_min_speed": [
+ "10"
+ ],
+ "slow_down_layer_time": [
+ "6"
+ ],
+ "filament_start_gcode": [
+ "; Filament gcode\n"
+ ],
+ "nozzle_temperature": [
+ "260"
+ ],
+ "temperature_vitrification": [
+ "71"
+ ],
+ "filament_id": "PMPE01",
+ "nozzle_temperature_range_high": [
+ "260"
+ ],
+ "nozzle_temperature_range_low": [
+ "240"
+ ],
+ "supertack_plate_temp": [
+ "70"
+ ],
+ "supertack_plate_temp_initial_layer": [
+ "70"
+ ],
+ "setting_id": "PMPE01_U1",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "inherits": "Polymaker PETG @Base"
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json
new file mode 100644
index 0000000000..d25cf0270d
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json
@@ -0,0 +1,29 @@
+{
+ "filament_density": [
+ "1.23"
+ ],
+ "temp_min": [
+ "190"
+ ],
+ "temp_max": [
+ "230"
+ ],
+ "temperture_vitrification": [
+ "55"
+ ],
+ "idle_temperture": [
+ "0"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "description": "",
+ "inherits": "fdm_filament_pla",
+ "name": "Polymaker PLA Pro @Base",
+ "type": "filament",
+ "instantiation": "false",
+ "from": "system",
+ "filament_vendor": [
+ "Polymaker"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json
new file mode 100644
index 0000000000..8b77ae186f
--- /dev/null
+++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json
@@ -0,0 +1,96 @@
+{
+ "type": "filament",
+ "name": "Polymaker PLA Pro @Snapmaker U1",
+ "from": "system",
+ "instantiation": "true",
+ "cool_plate_temp": [
+ "50"
+ ],
+ "eng_plate_temp": [
+ "50"
+ ],
+ "hot_plate_temp": [
+ "65"
+ ],
+ "textured_plate_temp": [
+ "50"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "50"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "50"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "65"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "50"
+ ],
+ "overhang_fan_threshold": [
+ "50%"
+ ],
+ "overhang_fan_speed": [
+ "100"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode \n"
+ ],
+ "filament_flow_ratio": [
+ "0.96"
+ ],
+ "filament_cost": [
+ "0"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_max_volumetric_speed": [
+ "15"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_vendor": [
+ "Polymaker"
+ ],
+ "bed_type": [
+ "Cool Plate"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "fan_max_speed": [
+ "100"
+ ],
+ "slow_down_min_speed": [
+ "5"
+ ],
+ "slow_down_layer_time": [
+ "6"
+ ],
+ "filament_start_gcode": [
+ "; filament start gcode\n"
+ ],
+ "nozzle_temperature": [
+ "220"
+ ],
+ "temperature_vitrification": [
+ "61"
+ ],
+ "nozzle_temperature_range_high": [
+ "230"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ],
+ "setting_id": "PMPL03_U1",
+ "compatible_printers": [
+ "Snapmaker U1 (0.4 nozzle)"
+ ],
+ "inherits": "Polymaker PLA Pro @Base",
+ "filament_id": "PMPL03"
+}
\ No newline at end of file
diff --git a/resources/profiles/WonderMaker/WonderMaker ZR ULtra S_cover.png b/resources/profiles/WonderMaker/WonderMaker ZR Ultra S_cover.png
similarity index 100%
rename from resources/profiles/WonderMaker/WonderMaker ZR ULtra S_cover.png
rename to resources/profiles/WonderMaker/WonderMaker ZR Ultra S_cover.png
diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json
index 17d813bac9..c904ad1a1f 100644
--- a/resources/profiles/iQ.json
+++ b/resources/profiles/iQ.json
@@ -80,6 +80,10 @@
{
"name": "0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle)",
"sub_path": "process/0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle).json"
+ },
+ {
+ "name": "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)",
+ "sub_path": "process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json"
}
],
"filament_list": [
@@ -106,6 +110,10 @@
{
"name": "VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle",
"sub_path": "filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json"
+ },
+ {
+ "name": "Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle",
+ "sub_path": "filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json"
}
]
}
diff --git a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json
new file mode 100644
index 0000000000..20146fa309
--- /dev/null
+++ b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json
@@ -0,0 +1,303 @@
+{
+ "type": "filament",
+ "name": "Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle",
+ "inherits": "fdm_filament_common",
+ "from": "system",
+ "setting_id": "IQS1",
+ "filament_id": "IQM1",
+ "instantiation": "true",
+ "compatible_prints": [
+ "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)"
+ ],
+ "filament_cost": [
+ "70.58"
+ ],
+ "filament_density": [
+ "1.09"
+ ],
+ "filament_end_gcode": [
+ "; filament end gcode\n{if current_extruder==0}\nG1 Z{layer_z+2} F900 ; safe distance for T0 while tool change\nG1 X-17 Y1 F9000\nG1 X-17 Y45 F9000\nG1 Y1 F9000\nG1 Y45 F9000\n{endif}\n\n{if current_extruder==1}\n{if current_extruder==0}T1{endif}\nG1 X-23 Y3 F9000\nG1 Y45 F9000\nG1 Y3 F9000\nG1 Y45 F9000\n{endif}\n"
+ ],
+ "filament_flow_ratio": [
+ "0.926"
+ ],
+ "filament_settings_id": [
+ "Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle"
+ ],
+ "filament_shrink": [
+ "98.994%"
+ ],
+ "filament_shrinkage_compensation_z": [
+ "99%"
+ ],
+ "filament_start_gcode": [
+ "; Filament gcode\n{if current_extruder==0}\nG1 X-17 Y1 F9000\nG1 Y45 F9000\nG1 Y1 F9000\nG1 Y45 F9000\n{if layer_z==0}G1 Z{first_layer_height + 2.0}{endif}\n{if layer_z==0}G1 X[first_layer_print_min_0] Y[first_layer_print_min_1]{endif}\n{if layer_z==0}G1 Z{layer_z}{endif}\n{endif}\n\n{if current_extruder==1}\nG1 X-23 Y3 F9000\nG1 Y45 F9000\nG1 Y3 F9000\nG1 Y45 F9000\n{endif}\n"
+ ],
+ "filament_type": [
+ "HPP4GF25"
+ ],
+ "hot_plate_temp": [
+ "110"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "110"
+ ],
+ "idle_temperature": [
+ "180"
+ ],
+ "is_custom_defined": "0",
+ "nozzle_temperature": [
+ "220"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "220"
+ ],
+ "nozzle_temperature_range_high": [
+ "280"
+ ],
+ "nozzle_temperature_range_low": [
+ "220"
+ ],
+ "temperature_vitrification": [
+ "127"
+ ],
+ "version": "2.3.1.10",
+
+
+ "activate_air_filtration": [
+ "0"
+ ],
+ "activate_chamber_temp_control": [
+ "0"
+ ],
+ "adaptive_pressure_advance": [
+ "0"
+ ],
+ "adaptive_pressure_advance_bridges": [
+ "0"
+ ],
+ "adaptive_pressure_advance_model": [
+ "0,0,0\n0,0,0"
+ ],
+ "adaptive_pressure_advance_overhangs": [
+ "0"
+ ],
+ "additional_cooling_fan_speed": [
+ "0"
+ ],
+ "chamber_temperature": [
+ "0"
+ ],
+ "close_fan_the_first_x_layers": [
+ "3"
+ ],
+ "compatible_printers": [
+ "iQ TiQ2 0.4 Nozzle"
+ ],
+ "compatible_printers_condition": "",
+ "compatible_prints_condition": "",
+ "complete_print_exhaust_fan_speed": [
+ "80"
+ ],
+ "cool_plate_temp": [
+ "105"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "105"
+ ],
+ "default_filament_colour": [
+ "#000000"
+ ],
+ "dont_slow_down_outer_wall": [
+ "0"
+ ],
+ "during_print_exhaust_fan_speed": [
+ "60"
+ ],
+ "enable_overhang_bridge_fan": [
+ "1"
+ ],
+ "enable_pressure_advance": [
+ "0"
+ ],
+ "eng_plate_temp": [
+ "105"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "105"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "fan_max_speed": [
+ "80"
+ ],
+ "fan_min_speed": [
+ "10"
+ ],
+ "filament_cooling_final_speed": [
+ "3.5"
+ ],
+ "filament_cooling_initial_speed": [
+ "10"
+ ],
+ "filament_cooling_moves": [
+ "2"
+ ],
+ "filament_deretraction_speed": [
+ "nil"
+ ],
+ "filament_diameter": [
+ "1.75"
+ ],
+ "filament_is_support": [
+ "0"
+ ],
+ "filament_loading_speed": [
+ "10"
+ ],
+ "filament_loading_speed_start": [
+ "50"
+ ],
+ "filament_long_retractions_when_cut": [
+ "nil"
+ ],
+ "filament_max_volumetric_speed": [
+ "12"
+ ],
+ "filament_minimal_purge_on_wipe_tower": [
+ "15"
+ ],
+ "filament_multitool_ramming": [
+ "1"
+ ],
+ "filament_multitool_ramming_flow": [
+ "40"
+ ],
+ "filament_multitool_ramming_volume": [
+ "10"
+ ],
+ "filament_notes": [
+ ""
+ ],
+ "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_retract_before_wipe": [
+ "nil"
+ ],
+ "filament_retract_lift_above": [
+ "nil"
+ ],
+ "filament_retract_lift_below": [
+ "nil"
+ ],
+ "filament_retract_lift_enforce": [
+ "nil"
+ ],
+ "filament_retract_restart_extra": [
+ "nil"
+ ],
+ "filament_retract_when_changing_layer": [
+ "nil"
+ ],
+ "filament_retraction_distances_when_cut": [
+ "nil"
+ ],
+ "filament_retraction_length": [
+ "4"
+ ],
+ "filament_retraction_minimum_travel": [
+ "nil"
+ ],
+ "filament_retraction_speed": [
+ "40"
+ ],
+ "filament_soluble": [
+ "0"
+ ],
+ "filament_stamping_distance": [
+ "45"
+ ],
+ "filament_stamping_loading_speed": [
+ "29"
+ ],
+ "filament_toolchange_delay": [
+ "0"
+ ],
+ "filament_unloading_speed": [
+ "100"
+ ],
+ "filament_unloading_speed_start": [
+ "100"
+ ],
+ "filament_vendor": [
+ "iQ Materials"
+ ],
+ "filament_wipe": [
+ "nil"
+ ],
+ "filament_wipe_distance": [
+ "nil"
+ ],
+ "filament_z_hop": [
+ "nil"
+ ],
+ "filament_z_hop_types": [
+ "nil"
+ ],
+ "full_fan_speed_layer": [
+ "0"
+ ],
+ "internal_bridge_fan_speed": [
+ "-1"
+ ],
+ "overhang_fan_speed": [
+ "80"
+ ],
+ "overhang_fan_threshold": [
+ "25%"
+ ],
+ "pellet_flow_coefficient": [
+ "0.4157"
+ ],
+ "pressure_advance": [
+ "0.02"
+ ],
+ "reduce_fan_stop_start_freq": [
+ "1"
+ ],
+ "required_nozzle_HRC": [
+ "0"
+ ],
+ "slow_down_for_layer_cooling": [
+ "1"
+ ],
+ "slow_down_layer_time": [
+ "3"
+ ],
+ "slow_down_min_speed": [
+ "10"
+ ],
+ "supertack_plate_temp": [
+ "35"
+ ],
+ "supertack_plate_temp_initial_layer": [
+ "35"
+ ],
+ "support_material_interface_fan_speed": [
+ "-1"
+ ],
+ "textured_cool_plate_temp": [
+ "40"
+ ],
+ "textured_cool_plate_temp_initial_layer": [
+ "40"
+ ],
+ "textured_plate_temp": [
+ "105"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "105"
+ ]
+}
diff --git a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json
index 457b37f8cd..054350acfc 100644
--- a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json
+++ b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json
@@ -30,9 +30,6 @@
"chamber_temperature": [
"0"
],
- "close_fan_the_first_x_layers": [
- "3"
- ],
"compatible_printers": [
"iQ TiQ2 0.4 Nozzle"
],
@@ -89,6 +86,9 @@
"filament_cooling_moves": [
"4"
],
+ "close_fan_the_first_x_layers": [
+ "1000"
+ ],
"filament_cost": [
"29.99"
],
@@ -162,7 +162,7 @@
"nil"
],
"filament_retraction_length": [
- "0.2"
+ "0.4"
],
"filament_retraction_minimum_travel": [
"nil"
@@ -222,7 +222,7 @@
"0"
],
"hot_plate_temp": [
- "80"
+ "70"
],
"hot_plate_temp_initial_layer": [
"80"
@@ -237,7 +237,7 @@
"-1"
],
"nozzle_temperature": [
- "250"
+ "240"
],
"nozzle_temperature_initial_layer": [
"250"
@@ -261,7 +261,7 @@
"0.02"
],
"reduce_fan_stop_start_freq": [
- "1"
+ "0"
],
"required_nozzle_HRC": [
"3"
diff --git a/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json b/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json
new file mode 100644
index 0000000000..0a542fe938
--- /dev/null
+++ b/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json
@@ -0,0 +1,70 @@
+{
+ "type": "process",
+ "inherits": "fdm_process_tiq_common",
+ "from": "system",
+ "instantiation": "true",
+ "default_acceleration": "1500",
+ "enable_extra_bridge_layer": "apply_to_all",
+ "enable_prime_tower": "0",
+ "initial_layer_infill_speed": "100",
+ "inner_wall_acceleration": "1500",
+ "inner_wall_speed": "100",
+ "is_custom_defined": "0",
+ "name": "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)",
+ "notes": "Pre-Select: FBA Time Delay: 0 EPC Factor: 0\n\nDeutsch P1 HPP4GF25\n\n1. Überprüfen Sie, dass sich das Grauts HPP4GF25 im linken Extruder befindet. Halten Sie das Filament trocken! Detailierte Trocknungsanleitung, siehe unten.\n\n2. Überprüfen Sie, dass sich eine 0,4 mm Wolfram-Kupfer Düse im linken Extruder befindet.\n\n3. Verwenden Sie Magigoo Kleber für PPGF auf der PET-Folie, um eine bessere Haftung zu gewährleisten, im Singledruck in der Regel auf PET-Folie nicht erforderlich.\n\n4. Reinigen Sie ggf. die Düse mit einer Messing-Drahtbürste.\nNun sind sie bereit, um Ihren Druck zu starten.\n\n\nTipp: Am besten lässt sich das Bauteil bei einer Druckplattentemperatur von 80°C entfernen, da dann der Kleber weich wird.\n\n\nEnglish P1 HPP4GF25\n\n1. Check Left extruder filament: Grauts HPP4GF25 - Keep the filament dry!! Detailed drying instruction below.\n\n2. Check left extruder nozzle: 0.4mm Wolfram\n\n3. Check bed: PET with Magigoo glue for PPGF\n\n4. Check nozzle: Clean it with brush\n\nWELLDONE! YOU ARE READY NOW TO START YOUR PRINT JOB!\n\n\nTip: The component is best removed at a printing plate temperature of 80°C, as this softens the adhesive.",
+ "outer_wall_acceleration": "1500",
+ "outer_wall_speed": "80",
+ "print_settings_id": "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)",
+ "sparse_infill_speed": "100",
+ "support_angle": "0",
+ "support_base_pattern": "default",
+ "support_interface_bottom_layers": "0",
+ "support_interface_top_layers": "3",
+ "support_object_first_layer_gap": "0.3",
+ "support_object_xy_distance": "0.35",
+ "support_on_build_plate_only": "0",
+ "support_speed": "100",
+ "support_style": "snug",
+ "support_top_z_distance": "0.2",
+ "support_type": "normal(auto)",
+ "top_surface_acceleration": "1500",
+ "top_surface_speed": "80",
+ "travel_acceleration": "1500",
+ "version": "2.3.1.10",
+
+ "bridge_flow": "1.07",
+ "bridge_speed": "25",
+ "brim_type": "no_brim",
+ "enable_support": "1",
+ "exclude_object": "0",
+ "gcode_label_objects": "0",
+ "compatible_printers": [
+ "iQ TiQ2 0.4 Nozzle"
+ ],
+ "internal_bridge_speed": "50%",
+ "internal_solid_infill_speed": "60",
+ "ironing_pattern": "concentric",
+ "prime_tower_width": "80",
+ "layer_height": "0.2",
+ "reduce_crossing_wall": "1",
+ "skirt_height": "1",
+ "skirt_loops": "2",
+ "small_perimeter_speed": "30%",
+ "small_perimeter_threshold": "5",
+ "sparse_infill_density": "30%",
+ "sparse_infill_pattern": "triangles",
+ "support_base_pattern_spacing": "1",
+ "support_bottom_interface_spacing": "0.3",
+ "support_bottom_z_distance": "0.24",
+ "support_expansion": "0.5",
+ "support_filament": "1",
+ "support_interface_filament": "1",
+ "support_interface_pattern": "rectilinear_interlaced",
+ "support_interface_spacing": "0",
+ "top_shell_thickness": "0",
+ "top_solid_infill_flow_ratio": "0.98",
+ "tree_support_branch_diameter_angle": "10",
+ "tree_support_branch_diameter_organic": "3",
+ "tree_support_tip_diameter": "2",
+ "wall_loops": "2"
+}
diff --git a/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - PETG Polymax Polymaker (0.4 Nozzle).json b/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - PETG Polymax Polymaker (0.4 Nozzle).json
index 096eb82e13..1093c7c1c7 100644
--- a/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - PETG Polymax Polymaker (0.4 Nozzle).json
+++ b/resources/profiles/iQ/process/0.20mm Standard @iQ TiQ2 P1 - PETG Polymax Polymaker (0.4 Nozzle).json
@@ -20,6 +20,9 @@
"enable_overhang_speed": "0",
"enable_prime_tower": "0",
"gap_infill_speed": "50",
+ "thick_internal_bridges": "0",
+ "enable_extra_bridge_layer": "apply_to_all",
+ "bottom_shell_thickness": "0.8",
"initial_layer_infill_speed": "25",
"initial_layer_speed": "25",
"initial_layer_travel_speed": "50%",
@@ -63,10 +66,11 @@
"tree_support_wall_count": "2",
"wall_direction": "ccw",
"wall_loops": "3",
- "wall_sequence": "inner-outer-inner wall",
+ "wall_sequence": "inner wall/outer wall",
"support_base_pattern": "rectilinear-grid",
"support_interface_pattern": "rectilinear_interlaced",
"support_interface_spacing": "0",
- "small_perimeter_speed": "30%",
+ "small_perimeter_speed": "50",
+ "support_interface_speed": "50",
"brim_type": "no_brim"
}
\ No newline at end of file
diff --git a/resources/web/flush/WipingDialog.html b/resources/web/flush/WipingDialog.html
index efaea1c8ea..249ee03449 100644
--- a/resources/web/flush/WipingDialog.html
+++ b/resources/web/flush/WipingDialog.html
@@ -432,10 +432,11 @@
return (0.299 * r + 0.587 * g + 0.114 * b) / 255;
}
-
function updateVolumeRange(min_volume,max_volume){
+ // Orca: "Typical" guidance only unlinked from upper bound in the slicer.
+ const TYPICAL_MAX_FLUSH_VOLUME = 900;
const panel = document.getElementById('volume_range_panel');
- panel.innerText = panel.innerText.replace(/\[.*\]/, `[${min_volume}, ${max_volume}]`);
+ panel.innerText = panel.innerText.replace(/\[.*\]/, `[${min_volume}, ${TYPICAL_MAX_FLUSH_VOLUME}]`);
}
function updateMultiplierRange(min_multiplier,max_multiplier){
diff --git a/scripts/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml b/scripts/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml
index 96fd4c3ad7..c63f02d96b 100755
--- a/scripts/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml
+++ b/scripts/flatpak/io.github.softfever.OrcaSlicer.metainfo.xml
@@ -11,7 +11,7 @@
Get even more perfect prints!
SoftFever
https://github.com/OrcaSlicer/OrcaSlicer
- https://github.com/OrcaSlicer/OrcaSlicer/wiki
+ https://www.orcaslicer.com/wiki
https://github.com/OrcaSlicer/OrcaSlicer/issues/
https://ko-fi.com/SoftFever
0BSD
diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh
index 081467b300..292c6c9d3f 100755
--- a/scripts/run_unit_tests.sh
+++ b/scripts/run_unit_tests.sh
@@ -9,4 +9,4 @@ ROOT_DIR="$(dirname "$0")/.."
cd "${ROOT_DIR}" || exit 1
-ctest --test-dir build/tests --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j
+ctest --test-dir build/tests -L "Http|PlaceholderParser" --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0e30500e42..a123be1fab 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,8 +6,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Include dev-utils for encoding check and other utilities
add_subdirectory(dev-utils)
-# Clipper2 math utils
-add_subdirectory(clipper2)
# add_subdirectory(avrdude)
# Note: semver and hints are now included from deps_src/CMakeLists.txt
diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp
index f96d68cc10..c9ce68e3e0 100644
--- a/src/libslic3r/AppConfig.cpp
+++ b/src/libslic3r/AppConfig.cpp
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
#include
@@ -134,6 +135,25 @@ void AppConfig::set_defaults()
if (!get("use_legacy_opengl").empty())
erase("app", "use_legacy_opengl");
+ // Migrate legacy_networking boolean to network_plugin_version string
+ std::string legacy_networking = get("legacy_networking");
+ std::string network_version = get("network_plugin_version");
+
+ if (!legacy_networking.empty()) {
+ // Old legacy_networking setting exists - migrate it
+ bool was_legacy = (legacy_networking == "true" || legacy_networking == "1");
+
+ if (was_legacy && network_version.empty()) {
+ // User had legacy mode enabled - set to legacy version number
+ BOOST_LOG_TRIVIAL(info) << "Migrating legacy_networking=true to network_plugin_version=01.10.01.01";
+ set_network_plugin_version(BAMBU_NETWORK_AGENT_VERSION_LEGACY);
+ }
+ // Note: If was_legacy=false, we leave the version empty and let the GUI layer set it to the latest version
+
+ // Remove the old setting
+ erase("app", "legacy_networking");
+ }
+
#ifdef __APPLE__
if (get("use_retina_opengl").empty())
set_bool("use_retina_opengl", true);
@@ -280,9 +300,6 @@ void AppConfig::set_defaults()
if (get("allow_abnormal_storage").empty()) {
set_bool("allow_abnormal_storage", false);
}
- if (get("legacy_networking").empty()) {
- set_bool("legacy_networking", false);
- }
if(get("check_stable_update_only").empty()) {
set_bool("check_stable_update_only", false);
@@ -317,10 +334,18 @@ void AppConfig::set_defaults()
set("auto_calculate_flush","all");
}
+ if (get("show_canvas_zoom_button").empty()) {
+ set_bool("show_canvas_zoom_button", true);
+ }
+
if (get("remember_printer_config").empty()) {
set_bool("remember_printer_config", true);
}
+ if (get("group_filament_presets").empty()) {
+ set("group_filament_presets", "1"); // All "0" / None "1" / By Type "2" / By Vendor "3"
+ }
+
if (get("enable_high_low_temp_mixed_printing").empty()){
set_bool("enable_high_low_temp_mixed_printing", false);
}
@@ -1435,6 +1460,82 @@ std::string AppConfig::get_nozzle_volume_types_from_config(const std::string& pr
return nozzle_volume_types;
}
+std::string AppConfig::get_network_plugin_version() const
+{
+ return get(SETTING_NETWORK_PLUGIN_VERSION);
+}
+
+void AppConfig::set_network_plugin_version(const std::string& version)
+{
+ set(SETTING_NETWORK_PLUGIN_VERSION, version);
+}
+
+std::vector AppConfig::get_skipped_network_versions() const
+{
+ std::vector result;
+ std::string skipped = get(SETTING_NETWORK_PLUGIN_SKIPPED_VERSIONS);
+ if (skipped.empty())
+ return result;
+
+ std::stringstream ss(skipped);
+ std::string version;
+ while (std::getline(ss, version, ';')) {
+ if (!version.empty())
+ result.push_back(version);
+ }
+ return result;
+}
+
+void AppConfig::add_skipped_network_version(const std::string& version)
+{
+ auto skipped = get_skipped_network_versions();
+ if (std::find(skipped.begin(), skipped.end(), version) == skipped.end()) {
+ skipped.push_back(version);
+ std::string joined;
+ for (size_t i = 0; i < skipped.size(); ++i) {
+ if (i > 0) joined += ";";
+ joined += skipped[i];
+ }
+ set(SETTING_NETWORK_PLUGIN_SKIPPED_VERSIONS, joined);
+ }
+}
+
+bool AppConfig::is_network_version_skipped(const std::string& version) const
+{
+ auto skipped = get_skipped_network_versions();
+ return std::find(skipped.begin(), skipped.end(), version) != skipped.end();
+}
+
+void AppConfig::clear_skipped_network_versions()
+{
+ set(SETTING_NETWORK_PLUGIN_SKIPPED_VERSIONS, "");
+}
+
+bool AppConfig::is_network_update_prompt_disabled() const
+{
+ return get_bool(SETTING_NETWORK_PLUGIN_UPDATE_DISABLED);
+}
+
+void AppConfig::set_network_update_prompt_disabled(bool disabled)
+{
+ set_bool(SETTING_NETWORK_PLUGIN_UPDATE_DISABLED, disabled);
+}
+
+bool AppConfig::should_remind_network_update_later() const
+{
+ return get_bool(SETTING_NETWORK_PLUGIN_REMIND_LATER);
+}
+
+void AppConfig::set_remind_network_update_later(bool remind)
+{
+ set_bool(SETTING_NETWORK_PLUGIN_REMIND_LATER, remind);
+}
+
+void AppConfig::clear_remind_network_update_later()
+{
+ set_bool(SETTING_NETWORK_PLUGIN_REMIND_LATER, false);
+}
+
void AppConfig::reset_selections()
{
auto it = m_storage.find("presets");
diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp
index 9307877552..b521410ce9 100644
--- a/src/libslic3r/AppConfig.hpp
+++ b/src/libslic3r/AppConfig.hpp
@@ -24,6 +24,12 @@ using namespace nlohmann;
#define OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK "always_ask"
#define OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY "load_geometry_only"
+#define SETTING_NETWORK_PLUGIN_VERSION "network_plugin_version"
+#define SETTING_NETWORK_PLUGIN_SKIPPED_VERSIONS "network_plugin_skipped_versions"
+#define SETTING_NETWORK_PLUGIN_UPDATE_DISABLED "network_plugin_update_prompts_disabled"
+#define SETTING_NETWORK_PLUGIN_REMIND_LATER "network_plugin_remind_later"
+#define BAMBU_NETWORK_AGENT_VERSION_LEGACY "01.10.01.01"
+
#define SUPPORT_DARK_MODE
//#define _MSW_DARK_MODE
@@ -347,6 +353,21 @@ public:
static const std::string SECTION_MATERIALS;
static const std::string SECTION_EMBOSS_STYLE;
+ std::string get_network_plugin_version() const;
+ void set_network_plugin_version(const std::string& version);
+
+ std::vector get_skipped_network_versions() const;
+ void add_skipped_network_version(const std::string& version);
+ bool is_network_version_skipped(const std::string& version) const;
+ void clear_skipped_network_versions();
+
+ bool is_network_update_prompt_disabled() const;
+ void set_network_update_prompt_disabled(bool disabled);
+
+ bool should_remind_network_update_later() const;
+ void set_remind_network_update_later(bool remind);
+ void clear_remind_network_update_later();
+
private:
template
bool get_3dmouse_device_numeric_value(const std::string &device_name, const char *parameter_name, T &out) const
diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp
index d21ed2e544..35d971a465 100644
--- a/src/libslic3r/Brim.cpp
+++ b/src/libslic3r/Brim.cpp
@@ -1,5 +1,3 @@
-#include "clipper/clipper_z.hpp"
-
#include "ClipperUtils.hpp"
#include "EdgeGrid.hpp"
#include "Layer.hpp"
@@ -10,8 +8,8 @@
#include "MaterialType.hpp"
#include "Model.hpp"
#include
-#include
-#include
+#include
+#include
#include
#include
@@ -54,16 +52,63 @@ static void append_and_translate(Polygons &dst, const Polygons &src, const Print
dst[dst_idx].translate(instance_shift);
}
-static float max_brim_width(const ConstPrintObjectPtrsAdaptor &objects)
+//ORCA: Brim can follow the post-EFC outline when enabled.
+static bool use_brim_efc_outline(const PrintObject &object)
{
- assert(!objects.empty());
- return float(std::accumulate(objects.begin(), objects.end(), 0.,
- [](double partial_result, const PrintObject *object) {
- return std::max(partial_result, object->config().brim_type == btNoBrim ? 0. : object->config().brim_width.value);
- }));
+ return object.config().brim_use_efc_outline.value
+ && object.config().elefant_foot_compensation.value > 0.
+ && object.config().elefant_foot_compensation_layers.value > 0
+ && object.config().raft_layers.value == 0;
}
-// Returns ExPolygons of the bottom layer of the print object after elephant foot compensation.
+//ORCA: Helper for snapping painted ears to the EFC outline.
+static bool closest_point_on_expolygons(const ExPolygons &polygons, const Point &from, Point &closest_out)
+{
+ double min_dist2 = std::numeric_limits::max();
+ bool found = false;
+
+ for (const ExPolygon &poly : polygons) {
+ for (int i = 0; i < poly.num_contours(); ++i) {
+ const Point *candidate = poly.contour_or_hole(i).closest_point(from);
+ if (candidate == nullptr)
+ continue;
+ const int64_t dx = int64_t(candidate->x()) - int64_t(from.x());
+ const int64_t dy = int64_t(candidate->y()) - int64_t(from.y());
+ const double dist2 = double(dx * dx + dy * dy);
+ if (dist2 < min_dist2) {
+ min_dist2 = dist2;
+ closest_out = *candidate;
+ found = true;
+ }
+ }
+ }
+ return found;
+}
+
+//ORCA: Helper for matching painted ears to their original island before EFC snapping.
+static int find_containing_expolygon_index(const ExPolygons &polygons, const Point &from)
+{
+ for (size_t idx = 0; idx < polygons.size(); ++idx) {
+ if (polygons[idx].contains(from))
+ return int(idx);
+ }
+ return -1;
+}
+
+//ORCA: Keep painted ear snapping on the matching island when using EFC outline.
+static bool closest_point_on_matching_island(const ExPolygons &raw_outline, const ExPolygons &efc_outline, const Point &from, Point &closest_out)
+{
+ const int island_idx = find_containing_expolygon_index(raw_outline, from);
+ if (island_idx >= 0) {
+ ExPolygons island_outline = intersection_ex(efc_outline, raw_outline[island_idx]);
+ if (!island_outline.empty())
+ return closest_point_on_expolygons(island_outline, from, closest_out);
+ }
+ return closest_point_on_expolygons(efc_outline, from, closest_out);
+}
+//ORCA: Use post-processed first-layer slices (including EFC) for brim outline.
+// Returns ExPolygons of the bottom layer after all first-layer modifiers
+// (including elephant foot compensation, if enabled) have been applied.
static ExPolygons get_print_object_bottom_layer_expolygons(const PrintObject &print_object)
{
ExPolygons ex_polygons;
@@ -71,506 +116,6 @@ static ExPolygons get_print_object_bottom_layer_expolygons(const PrintObject &pr
Slic3r::append(ex_polygons, closing_ex(region->slices.surfaces, float(SCALED_EPSILON)));
return ex_polygons;
}
-
-// Returns ExPolygons of bottom layer for every print object in Print after elephant foot compensation.
-static std::vector get_print_bottom_layers_expolygons(const Print &print)
-{
- std::vector bottom_layers_expolygons;
- bottom_layers_expolygons.reserve(print.objects().size());
- for (const PrintObject *object : print.objects())
- bottom_layers_expolygons.emplace_back(get_print_object_bottom_layer_expolygons(*object));
-
- return bottom_layers_expolygons;
-}
-
-static ConstPrintObjectPtrs get_top_level_objects_with_brim(const Print &print, const std::vector &bottom_layers_expolygons)
-{
- assert(print.objects().size() == bottom_layers_expolygons.size());
- Polygons islands;
- ConstPrintObjectPtrs island_to_object;
- for(size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) {
- const PrintObject *object = print.objects()[print_object_idx];
- Polygons islands_object;
- islands_object.reserve(bottom_layers_expolygons[print_object_idx].size());
- for (const ExPolygon &ex_poly : bottom_layers_expolygons[print_object_idx])
- islands_object.emplace_back(ex_poly.contour);
-
- islands.reserve(islands.size() + object->instances().size() * islands_object.size());
- for (const PrintInstance& instance : object->instances()) {
- Point instance_shift = instance.shift_without_plate_offset();
- for (Polygon& poly : islands_object) {
- islands.emplace_back(poly);
- islands.back().translate(instance_shift);
- island_to_object.emplace_back(object);
- }
- }
- }
- assert(islands.size() == island_to_object.size());
-
- ClipperLib_Z::Paths islands_clip;
- islands_clip.reserve(islands.size());
- for (const Polygon &poly : islands) {
- islands_clip.emplace_back();
- ClipperLib_Z::Path &island_clip = islands_clip.back();
- island_clip.reserve(poly.points.size());
- int island_idx = int(&poly - &islands.front());
- // The Z coordinate carries index of the island used to get the pointer to the object.
- for (const Point &pt : poly.points)
- island_clip.emplace_back(pt.x(), pt.y(), island_idx + 1);
- }
-
- // Init Clipper
- ClipperLib_Z::Clipper clipper;
- // Assign the maximum Z from four points. This values is valid index of the island
- clipper.ZFillFunction([](const ClipperLib_Z::IntPoint &e1bot, const ClipperLib_Z::IntPoint &e1top, const ClipperLib_Z::IntPoint &e2bot,
- const ClipperLib_Z::IntPoint &e2top, ClipperLib_Z::IntPoint &pt) {
- pt.z() = std::max(std::max(e1bot.z(), e1top.z()), std::max(e2bot.z(), e2top.z()));
- });
- // Add islands
- clipper.AddPaths(islands_clip, ClipperLib_Z::ptSubject, true);
- // Execute union operation to construct polytree
- ClipperLib_Z::PolyTree islands_polytree;
- //FIXME likely pftNonZero or ptfPositive would be better. Why are we using ptfEvenOdd for Unions?
- clipper.Execute(ClipperLib_Z::ctUnion, islands_polytree, ClipperLib_Z::pftEvenOdd, ClipperLib_Z::pftEvenOdd);
-
- std::unordered_set processed_objects_idx;
- ConstPrintObjectPtrs top_level_objects_with_brim;
- for (int i = 0; i < islands_polytree.ChildCount(); ++i) {
- for (const ClipperLib_Z::IntPoint &point : islands_polytree.Childs[i]->Contour) {
- if (point.z() != 0 && processed_objects_idx.find(island_to_object[point.z() - 1]->id().id) == processed_objects_idx.end()) {
- top_level_objects_with_brim.emplace_back(island_to_object[point.z() - 1]);
- processed_objects_idx.insert(island_to_object[point.z() - 1]->id().id);
- }
- }
- }
- return top_level_objects_with_brim;
-}
-
-static Polygons top_level_outer_brim_islands(const ConstPrintObjectPtrs &top_level_objects_with_brim, const double scaled_resolution)
-{
- Polygons islands;
- for (const PrintObject *object : top_level_objects_with_brim) {
- if (!object->has_brim())
- continue;
-
- //FIXME how about the brim type?
- auto brim_object_gap = float(scale_(object->config().brim_object_gap.value));
- Polygons islands_object;
- for (const ExPolygon &ex_poly : get_print_object_bottom_layer_expolygons(*object)) {
- Polygons contour_offset = offset(ex_poly.contour, brim_object_gap, ClipperLib::jtSquare);
- for (Polygon &poly : contour_offset)
- poly.douglas_peucker(scaled_resolution);
-
- polygons_append(islands_object, std::move(contour_offset));
- }
-
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- Polygons contour_offset = offset(support_contour, brim_object_gap, ClipperLib::jtSquare);
- for (Polygon& poly : contour_offset)
- poly.douglas_peucker(scaled_resolution);
-
- polygons_append(islands_object, std::move(contour_offset));
- }
- }
-
- for (const PrintInstance &instance : object->instances())
- append_and_translate(islands, islands_object, instance);
- }
- return islands;
-}
-
-static ExPolygons top_level_outer_brim_area(const Print &print,
- const ConstPrintObjectPtrs &top_level_objects_with_brim,
- const std::vector &bottom_layers_expolygons,
- const float no_brim_offset,
- // BBS
- double& brim_width_max,
- std::map& brim_width_map)
-{
- const auto scaled_resolution = scaled(print.config().resolution.value);
-
- assert(print.objects().size() == bottom_layers_expolygons.size());
- std::unordered_set top_level_objects_idx;
- top_level_objects_idx.reserve(top_level_objects_with_brim.size());
- for (const PrintObject *object : top_level_objects_with_brim)
- top_level_objects_idx.insert(object->id().id);
-
- ExPolygons brim_area;
- ExPolygons no_brim_area;
- brim_width_max = 0;
- for(size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) {
- const PrintObject *object = print.objects()[print_object_idx];
- const BrimType brim_type = object->config().brim_type.value;
- const float brim_object_gap = scale_(object->config().brim_object_gap.value);
- // recording the autoAssigned brimWidth and corresponding objs
- double brimWidthAuto = object->config().brim_width.value;
- double flowWidth = print.brim_flow().scaled_spacing() * SCALING_FACTOR;
- brimWidthAuto = floor(brimWidthAuto / flowWidth / 2) * flowWidth * 2;
- brim_width_map.insert(std::make_pair(object->id(), brimWidthAuto));
- brim_width_max = std::max(brim_width_max, brimWidthAuto);
- const float brim_width = scale_(brimWidthAuto);
- const bool is_top_outer_brim = top_level_objects_idx.find(object->id().id) != top_level_objects_idx.end();
-
- ExPolygons brim_area_object;
- ExPolygons no_brim_area_object;
- for (const ExPolygon &ex_poly : bottom_layers_expolygons[print_object_idx]) {
- if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim)
- append(brim_area_object, diff_ex(offset(ex_poly.contour, brim_width + brim_object_gap, ClipperLib::jtRound, scaled_resolution), offset(ex_poly.contour, brim_object_gap, ClipperLib::jtSquare)));
-
- // After 7ff76d07684858fd937ef2f5d863f105a10f798e offset and shrink don't work with CW polygons (holes), so let's make it CCW.
- Polygons ex_poly_holes_reversed = ex_poly.holes;
- polygons_reverse(ex_poly_holes_reversed);
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, shrink_ex(ex_poly_holes_reversed, no_brim_offset, ClipperLib::jtSquare));
-
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset, ClipperLib::jtSquare), ex_poly_holes_reversed));
-
- if (brim_type != BrimType::btNoBrim)
- append(no_brim_area_object, offset_ex(ExPolygon(ex_poly.contour), brim_object_gap, ClipperLib::jtSquare));
-
- no_brim_area_object.emplace_back(ex_poly.contour);
- }
-
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim)
- append(brim_area_object, diff_ex(offset(support_contour, brim_width + brim_object_gap, ClipperLib::jtRound, scaled_resolution), offset(support_contour, brim_object_gap)));
-
- if (brim_type != BrimType::btNoBrim)
- append(no_brim_area_object, offset_ex(ExPolygon(support_contour), brim_object_gap));
-
- no_brim_area_object.emplace_back(support_contour);
- }
- }
-
- for (const PrintInstance &instance : object->instances()) {
- append_and_translate(brim_area, brim_area_object, instance);
- append_and_translate(no_brim_area, no_brim_area_object, instance);
- }
- }
-
- return diff_ex(brim_area, no_brim_area);
-}
-
-// BBS: the brims of different objs will not overlapped with each other, and are stored by objs and by extruders
-static ExPolygons top_level_outer_brim_area(const Print& print, const ConstPrintObjectPtrs& top_level_objects_with_brim,
- const float no_brim_offset, double& brim_width_max, std::map& brim_width_map,
- std::map& brimAreaMap,
- std::map& supportBrimAreaMap, std::vector>& objPrintVec)
-{
- std::unordered_set top_level_objects_idx;
- top_level_objects_idx.reserve(top_level_objects_with_brim.size());
- for (const PrintObject* object : top_level_objects_with_brim)
- top_level_objects_idx.insert(object->id().id);
-
- unsigned int support_material_extruder = 1;
- if (print.has_support_material()) {
- assert(top_level_objects_with_brim.front()->config().support_filament >= 0);
- if (top_level_objects_with_brim.front()->config().support_filament > 0)
- support_material_extruder = top_level_objects_with_brim.front()->config().support_filament;
- }
-
- ExPolygons brim_area;
- ExPolygons no_brim_area;
- brim_width_max = 0;
- struct brimWritten {
- bool obj;
- bool sup;
- };
- std::map brimToWrite;
- for (const auto& objectWithExtruder : objPrintVec)
- brimToWrite.insert({ objectWithExtruder.first, {true,true} });
-
- for (unsigned int extruderNo : print.extruders()) {
- ++extruderNo;
- for (const auto &objectWithExtruder : objPrintVec) {
- const PrintObject* object = print.get_object(objectWithExtruder.first);
- const BrimType brim_type = object->config().brim_type.value;
- const float brim_offset = scale_(object->config().brim_object_gap.value);
- // recording the autoAssigned brimWidth and corresponding objs
- double brimWidthAuto = object->config().brim_width.value;
- double flowWidth = print.brim_flow().scaled_spacing() * SCALING_FACTOR;
- brimWidthAuto = floor(brimWidthAuto / flowWidth / 2) * flowWidth * 2;
- brim_width_map.insert(std::make_pair(object->id(), brimWidthAuto));
- brim_width_max = std::max(brim_width_max, brimWidthAuto);
- const float brim_width = scale_(brimWidthAuto);
- const bool is_top_outer_brim = top_level_objects_idx.find(object->id().id) != top_level_objects_idx.end();
-
- ExPolygons nullBrim;
- brimAreaMap.insert(std::make_pair(object->id(), nullBrim));
- ExPolygons brim_area_object;
- ExPolygons brim_area_support;
- ExPolygons no_brim_area_object;
- ExPolygons no_brim_area_support;
- if (objectWithExtruder.second == extruderNo && brimToWrite.at(object->id()).obj) {
- for (const ExPolygon& ex_poly : object->layers().front()->lslices) {
- if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim) {
- append(brim_area_object, diff_ex(offset_ex(ex_poly.contour, brim_width + brim_offset, jtRound, SCALED_RESOLUTION),
- offset_ex(ex_poly.contour, brim_offset)));
- }
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, offset_ex(ex_poly.holes, -no_brim_offset));
-
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly.holes));
-
- if (brim_type != BrimType::btNoBrim)
- append(no_brim_area_object, offset_ex(ExPolygon(ex_poly.contour), brim_offset));
-
- no_brim_area_object.emplace_back(ex_poly.contour);
- }
- brimToWrite.at(object->id()).obj = false;
- for (const PrintInstance& instance : object->instances()) {
- if (!brim_area_object.empty())
- append_and_translate(brim_area, brim_area_object, instance, print, brimAreaMap);
- append_and_translate(no_brim_area, no_brim_area_object, instance);
- }
- if (brimAreaMap.find(object->id()) != brimAreaMap.end())
- expolygons_append(brim_area, brimAreaMap[object->id()]);
- }
- if (support_material_extruder == extruderNo && brimToWrite.at(object->id()).sup) {
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- //BBS: no brim offset for supports
- if ((brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) && is_top_outer_brim)
- append(brim_area_support, diff_ex(offset(support_contour, brim_width, jtRound, SCALED_RESOLUTION), offset(support_contour, 0)));
-
- if (brim_type != BrimType::btNoBrim)
- append(no_brim_area_support, offset_ex(support_contour, 0));
-
- no_brim_area_support.emplace_back(support_contour);
- }
- }
-
- brimToWrite.at(object->id()).sup = false;
- for (const PrintInstance& instance : object->instances()) {
- if (!brim_area_support.empty())
- append_and_translate(brim_area, brim_area_support, instance, print, supportBrimAreaMap);
- append_and_translate(no_brim_area, no_brim_area_support, instance);
- }
- if (supportBrimAreaMap.find(object->id()) != supportBrimAreaMap.end())
- expolygons_append(brim_area, supportBrimAreaMap[object->id()]);
- }
- }
- }
- for (const PrintObject* object : print.objects()) {
- if (brimAreaMap.find(object->id()) != brimAreaMap.end())
- brimAreaMap[object->id()] = diff_ex(brimAreaMap[object->id()], no_brim_area);
- if (supportBrimAreaMap.find(object->id()) != supportBrimAreaMap.end())
- supportBrimAreaMap[object->id()] = diff_ex(supportBrimAreaMap[object->id()], no_brim_area);
- }
- return diff_ex(std::move(brim_area), no_brim_area);
-}
-static ExPolygons inner_brim_area(const Print &print,
- const ConstPrintObjectPtrs &top_level_objects_with_brim,
- const std::vector &bottom_layers_expolygons,
- const float no_brim_offset)
-{
- assert(print.objects().size() == bottom_layers_expolygons.size());
- std::unordered_set top_level_objects_idx;
- top_level_objects_idx.reserve(top_level_objects_with_brim.size());
- for (const PrintObject *object : top_level_objects_with_brim)
- top_level_objects_idx.insert(object->id().id);
-
- ExPolygons brim_area;
- ExPolygons no_brim_area;
- Polygons holes;
- for(size_t print_object_idx = 0; print_object_idx < print.objects().size(); ++print_object_idx) {
- const PrintObject *object = print.objects()[print_object_idx];
- const BrimType brim_type = object->config().brim_type.value;
- const float brim_object_gap = scale_(object->config().brim_object_gap.value);
- double flowWidth = print.brim_flow().scaled_spacing() * SCALING_FACTOR;
- const float brim_width = scale_(floor(object->config().brim_width.value / flowWidth / 2) * flowWidth * 2);
- const bool top_outer_brim = top_level_objects_idx.find(object->id().id) != top_level_objects_idx.end();
-
- ExPolygons brim_area_object;
- ExPolygons no_brim_area_object;
- Polygons holes_object;
- for (const ExPolygon &ex_poly : bottom_layers_expolygons[print_object_idx]) {
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) {
- if (top_outer_brim)
- no_brim_area_object.emplace_back(ex_poly);
- else
- append(brim_area_object, diff_ex(offset(ex_poly.contour, brim_width + brim_object_gap, ClipperLib::jtSquare), offset(ex_poly.contour, brim_object_gap, ClipperLib::jtSquare)));
- }
-
- // After 7ff76d07684858fd937ef2f5d863f105a10f798e offset and shrink don't work with CW polygons (holes), so let's make it CCW.
- Polygons ex_poly_holes_reversed = ex_poly.holes;
- polygons_reverse(ex_poly_holes_reversed);
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim)
- append(brim_area_object, diff_ex(shrink_ex(ex_poly_holes_reversed, brim_object_gap, ClipperLib::jtSquare), shrink_ex(ex_poly_holes_reversed, brim_width + brim_object_gap, ClipperLib::jtSquare)));
-
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset, ClipperLib::jtSquare), ex_poly_holes_reversed));
-
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, diff_ex(ExPolygon(ex_poly.contour), shrink_ex(ex_poly_holes_reversed, no_brim_offset, ClipperLib::jtSquare)));
-
- append(holes_object, ex_poly_holes_reversed);
- }
- append(no_brim_area_object, offset_ex(bottom_layers_expolygons[print_object_idx], brim_object_gap, ClipperLib::jtSquare));
-
- for (const PrintInstance &instance : object->instances()) {
- append_and_translate(brim_area, brim_area_object, instance);
- append_and_translate(no_brim_area, no_brim_area_object, instance);
- append_and_translate(holes, holes_object, instance);
- }
- }
-
- return diff_ex(intersection_ex(to_polygons(std::move(brim_area)), holes), no_brim_area);
-}
-
-// BBS: the brims of different objs will not overlapped with each other, and are stored by objs and by extruders
-static ExPolygons inner_brim_area(const Print& print, const ConstPrintObjectPtrs& top_level_objects_with_brim,
- const float no_brim_offset, std::map& brimAreaMap,
- std::map& supportBrimAreaMap,
- std::vector>& objPrintVec)
-{
- std::unordered_set top_level_objects_idx;
- top_level_objects_idx.reserve(top_level_objects_with_brim.size());
- for (const PrintObject* object : top_level_objects_with_brim)
- top_level_objects_idx.insert(object->id().id);
-
- unsigned int support_material_extruder = 1;
- if (print.has_support_material()) {
- assert(top_level_objects_with_brim.front()->config().support_filament >= 0);
- if (top_level_objects_with_brim.front()->config().support_filament > 0)
- support_material_extruder = top_level_objects_with_brim.front()->config().support_filament;
- }
-
- ExPolygons brim_area;
- ExPolygons no_brim_area;
- Polygons holes;
- Polygon bedShape(get_bed_shape(print.config()));
- holes.emplace_back(get_bed_shape(print.config()));
- std::map innerBrimAreaMap;
- std::map innerSupportBrimAreaMap;
-
- struct brimWritten {
- bool obj;
- bool sup;
- };
- std::map brimToWrite;
- for (const auto& objectWithExtruder : objPrintVec)
- brimToWrite.insert({ objectWithExtruder.first, {true,true} });
-
-
- for (unsigned int extruderNo : print.extruders()) {
- ++extruderNo;
- for (const auto& objectWithExtruder : objPrintVec) {
- const PrintObject* object = print.get_object(objectWithExtruder.first);
- const BrimType brim_type = object->config().brim_type.value;
- const float brim_offset = scale_(object->config().brim_object_gap.value);
- double flowWidth = print.brim_flow().scaled_spacing() * SCALING_FACTOR;
- const float brim_width = scale_(floor(object->config().brim_width.value / flowWidth / 2) * flowWidth * 2);
- const bool top_outer_brim = top_level_objects_idx.find(object->id().id) != top_level_objects_idx.end();
-
- ExPolygons brim_area_object;
- ExPolygons no_brim_area_object;
- ExPolygons brim_area_support;
- ExPolygons no_brim_area_support;
- Polygons holes_object;
- Polygons holes_support;
- if (objectWithExtruder.second == extruderNo && brimToWrite.at(object->id()).obj) {
- for (const ExPolygon& ex_poly : object->layers().front()->lslices) {
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) {
- if (top_outer_brim)
- no_brim_area_object.emplace_back(ex_poly);
- else
- append(brim_area_object, diff_ex(offset_ex(ex_poly.contour, brim_width + brim_offset, jtRound, SCALED_RESOLUTION), offset_ex(ex_poly.contour, brim_offset)));
- }
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btOuterAndInner)
- append(brim_area_object, diff_ex(offset_ex(ex_poly.holes, -brim_offset), offset_ex(ex_poly.holes, -brim_width - brim_offset)));
- if (brim_type == BrimType::btInnerOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly.holes));
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btNoBrim)
- append(no_brim_area_object, offset_ex(ex_poly.holes, -no_brim_offset));
- append(holes_object, ex_poly.holes);
- }
- append(no_brim_area_object, offset_ex(object->layers().front()->lslices, brim_offset));
- brimToWrite.at(object->id()).obj = false;
- for (const PrintInstance& instance : object->instances()) {
- if (!brim_area_object.empty())
- append_and_translate(brim_area, brim_area_object, instance, print, innerBrimAreaMap);
- append_and_translate(no_brim_area, no_brim_area_object, instance);
- append_and_translate(holes, holes_object, instance);
- }
- if (innerBrimAreaMap.find(object->id()) != innerBrimAreaMap.end())
- expolygons_append(brim_area, innerBrimAreaMap[object->id()]);
- }
- if (support_material_extruder == extruderNo && brimToWrite.at(object->id()).sup) {
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- if (brim_type == BrimType::btOuterOnly || brim_type == BrimType::btOuterAndInner || brim_type == BrimType::btAutoBrim) {
- if (!top_outer_brim)
- append(brim_area_support, diff_ex(offset_ex(support_contour, brim_width + brim_offset, jtRound, SCALED_RESOLUTION), offset_ex(support_contour, brim_offset)));
- }
- if (brim_type != BrimType::btNoBrim)
- append(no_brim_area_support, offset_ex(support_contour, 0));
- no_brim_area_support.emplace_back(support_contour);
- }
- }
- }
- brimToWrite.at(object->id()).sup = false;
- for (const PrintInstance& instance : object->instances()) {
- if (!brim_area_support.empty())
- append_and_translate(brim_area, brim_area_support, instance, print, innerSupportBrimAreaMap);
- append_and_translate(no_brim_area, no_brim_area_support, instance);
- append_and_translate(holes, holes_support, instance);
- }
- if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end())
- expolygons_append(brim_area, innerSupportBrimAreaMap[object->id()]);
- }
- }
- for (const PrintObject* object : print.objects()) {
- if (innerBrimAreaMap.find(object->id()) != innerBrimAreaMap.end()) {
- innerBrimAreaMap[object->id()] = intersection_ex(to_polygons(innerBrimAreaMap[object->id()]), holes);
- append(brimAreaMap[object->id()], innerBrimAreaMap[object->id()]);
- }
- if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end()) {
- innerSupportBrimAreaMap[object->id()] = intersection_ex(to_polygons(innerSupportBrimAreaMap[object->id()]), holes);
- append(supportBrimAreaMap[object->id()], innerSupportBrimAreaMap[object->id()]);
- }
- }
- for (const PrintObject* object : print.objects()) {
- if (brimAreaMap.find(object->id()) != brimAreaMap.end())
- brimAreaMap[object->id()] = diff_ex(brimAreaMap[object->id()], no_brim_area);
- if (supportBrimAreaMap.find(object->id()) != supportBrimAreaMap.end())
- supportBrimAreaMap[object->id()] = diff_ex(supportBrimAreaMap[object->id()], no_brim_area);
- }
- brim_area = intersection_ex(to_polygons(brim_area), holes);
- append(no_brim_area, brim_area);
- return no_brim_area;
-}
-
-//BBS maximum temperature difference from print object class
-double getTemperatureFromExtruder(const PrintObject* printObject) {
- auto print = printObject->print();
- std::vector extrudersFirstLayer;
- auto firstLayerRegions = printObject->layers().front()->regions();
- if (!firstLayerRegions.empty()) {
- for (const LayerRegion* regionPtr : firstLayerRegions) {
- if (regionPtr->has_extrusions())
- extrudersFirstLayer.push_back(regionPtr->region().extruder(frExternalPerimeter));
- }
- }
-
- const PrintConfig& config = print->config();
- int curr_bed_type = config.option("curr_bed_type")->getInt();
- const ConfigOptionInts* bed_temp_1st_layer_opt = config.option(get_bed_temp_1st_layer_key((BedType)curr_bed_type));
-
- double maxDeltaTemp = 0;
- for (auto extruderID : extrudersFirstLayer) {
- int bedTemp = bed_temp_1st_layer_opt->get_at(extruderID - 1);
- if (bedTemp > maxDeltaTemp)
- maxDeltaTemp = bedTemp;
- }
-
- return maxDeltaTemp;
-}
//BBS adhesion coefficients from print object class
double getadhesionCoeff(const PrintObject* printObject)
{
@@ -711,50 +256,6 @@ bool compSecondMoment(const ExPolygons& expolys, double& smExpolysX, double& smE
return true;
}
-
-
-
-//BBS: config brimwidth by volumes
-double configBrimWidthByVolumes(double deltaT, double adhesion, double maxSpeed, const ModelVolume* modelVolumePtr, const ExPolygons& expolys)
-{
- // height of a volume
- double height = 0;
- if (modelVolumePtr->is_model_part()) {
- auto rawBoundingbox = modelVolumePtr->mesh().transformed_bounding_box(modelVolumePtr->get_matrix());
- auto bbox = modelVolumePtr->get_object()->instances.front()->transform_bounding_box(rawBoundingbox);
- auto bbox_size = bbox.size();
- height = bbox_size(2);
- }
-
- // sencond moment of the expolygons of the first layer of the volume
- double Ixx = -1.e30, Iyy = -1.e30;
- if (!expolys.empty()) {
- if (!compSecondMoment(expolys, Ixx, Iyy))
- Ixx = Iyy = -1.e30;
- }
- Ixx = Ixx * SCALING_FACTOR * SCALING_FACTOR * SCALING_FACTOR * SCALING_FACTOR;
- Iyy = Iyy * SCALING_FACTOR * SCALING_FACTOR * SCALING_FACTOR * SCALING_FACTOR;
-
- // bounding box of the expolygons of the first layer of the volume
- BoundingBox bbox2;
- for (const auto& expoly : expolys)
- bbox2.merge(get_extents(expoly.contour));
- const double& bboxX = bbox2.size()(0);
- const double& bboxY = bbox2.size()(1);
- double thermalLength = sqrt(bboxX * bboxX + bboxY * bboxY) * SCALING_FACTOR;
- double thermalLengthRef = Model::getThermalLength(modelVolumePtr);
-
- double height_to_area = std::max(height / Ixx * (bbox2.size()(1) * SCALING_FACTOR), height / Iyy * (bbox2.size()(0) * SCALING_FACTOR));
- double brim_width = adhesion * std::min(std::min(std::max(height_to_area * maxSpeed / 24, thermalLength * 8. / thermalLengthRef * std::min(height, 30.) / 30.), 18.), 1.5 * thermalLength);
- // small brims are omitted
- if (brim_width < 5 && brim_width < 1.5 * thermalLength)
- brim_width = 0;
- // large brims are omitted
- if (brim_width > 18) brim_width = 18.;
-
- return brim_width;
-}
-
//BBS: config brimwidth by group of volumes
double configBrimWidthByVolumeGroups(double adhesion, double maxSpeed, const std::vector modelVolumePtrs, const ExPolygons& expolys, double &groupHeight)
{
@@ -857,6 +358,14 @@ static ExPolygons make_brim_ears(const PrintObject* object, const double& flowWi
if (brim_ear_points.size() <= 0) {
return mouse_ears_ex;
}
+ //ORCA: Painted ears can snap to the EFC-adjusted outline when enabled.
+ const bool use_efc_outline = use_brim_efc_outline(*object);
+ const ExPolygons &raw_outline = object->layers().front()->lslices;
+ //ORCA: Lazily computed EFC-adjusted bottom outline.
+ //Stored separately so we can avoid recomputation unless EFC snapping is used.
+ ExPolygons efc_outline_storage;
+ const ExPolygons* efc_outline = nullptr;
+
const Geometry::Transformation& trsf = object->model_object()->instances[0]->get_transformation();
Transform3d model_trsf = trsf.get_matrix_no_offset();
const Point ¢er_offset = object->center_offset();
@@ -880,6 +389,29 @@ static ExPolygons make_brim_ears(const PrintObject* object, const double& flowWi
Vec3f pos = pt.transform(model_trsf);
int32_t pt_x = scale_(pos.x());
int32_t pt_y = scale_(pos.y());
+
+ //ORCA: Snap painted ears to the EFC-adjusted outline when enabled.
+ if (use_efc_outline) {
+ if (efc_outline == nullptr) {
+ //ORCA: Compute EFC-adjusted outline lazily for painted ear snapping.
+ efc_outline_storage = get_print_object_bottom_layer_expolygons(*object);
+ efc_outline = &efc_outline_storage;
+ }
+
+ if (!efc_outline->empty()) {
+ Point closest_point;
+ //ORCA: Snap within the matching island to avoid drifting to another island.
+ if (closest_point_on_matching_island(
+ raw_outline,
+ *efc_outline,
+ Point(pt_x, pt_y),
+ closest_point)) {
+ pt_x = closest_point.x();
+ pt_y = closest_point.y();
+ }
+ }
+ }
+
mouse_ears_ex.back().contour.translate(Point(pt_x, pt_y));
}
return mouse_ears_ex;
@@ -926,6 +458,14 @@ static ExPolygons outer_inner_brim_area(const Print& print,
const bool has_outer_brim = brim_type == btOuterOnly || brim_type == btOuterAndInner || brim_type == btAutoBrim || use_auto_brim_ears || use_brim_ears;
coord_t ear_detection_length = scale_(object->config().brim_ears_detection_length.value);
coordf_t brim_ears_max_angle = object->config().brim_ears_max_angle.value;
+ //ORCA: Select brim base slices from EFC-compensated outline when enabled.
+ const bool use_efc_outline = use_brim_efc_outline(*object);
+ ExPolygons brim_slices_storage;
+ const ExPolygons* brim_slices = nullptr;
+ //ORCA: Select EFC-adjusted bottom outline when enabled.
+ if (use_efc_outline)
+ brim_slices_storage = get_print_object_bottom_layer_expolygons(*object);
+ brim_slices = use_efc_outline ? &brim_slices_storage : &object->layers().front()->lslices;
ExPolygons brim_area_object;
ExPolygons no_brim_area_object;
@@ -961,64 +501,72 @@ static ExPolygons outer_inner_brim_area(const Print& print,
double brimWidthRaw = configBrimWidthByVolumeGroups(adhesion, maxSpeed, groupVolumePtrs, volumeGroup.slices, groupHeight);
brim_width = scale_(floor(brimWidthRaw / flowWidth / 2) * flowWidth * 2);
}
- for (const ExPolygon& ex_poly : volumeGroup.slices) {
- // BBS: additional brim width will be added if part's adhesion area is too small and brim is not generated
- float brim_width_mod;
- if (brim_width < scale_(5.) && has_brim_auto && groupHeight > 10.) {
- brim_width_mod = ex_poly.area() / ex_poly.contour.length() < scaled_half_min_adh_length
- && brim_width < scaled_flow_width ? brim_width + scaled_additional_brim_width : brim_width;
- }
- else {
- brim_width_mod = brim_width;
- }
- //BBS: brim width should be limited to the 1.5*boundingboxSize of a single polygon.
- if (has_brim_auto) {
- BoundingBox bbox2 = ex_poly.contour.bounding_box();
- brim_width_mod = std::min(brim_width_mod, float(std::max(bbox2.size()(0), bbox2.size()(1))));
- }
- brim_width_mod = floor(brim_width_mod / scaled_flow_width / 2) * scaled_flow_width * 2;
-
- Polygons ex_poly_holes_reversed = ex_poly.holes;
- polygons_reverse(ex_poly_holes_reversed);
-
- if (has_outer_brim) {
- // BBS: inner and outer boundary are offset from the same polygon incase of round off error.
- auto innerExpoly = offset_ex(ex_poly.contour, brim_offset, jtRound, SCALED_RESOLUTION);
- ExPolygons outerExpoly;
- if (use_brim_ears) {
- outerExpoly = make_brim_ears(object, flowWidth, brim_offset, flow, true);
- //outerExpoly = offset_ex(outerExpoly, brim_width_mod, jtRound, SCALED_RESOLUTION);
- } else if (use_auto_brim_ears) {
- coord_t size_ear = (brim_width_mod - brim_offset - flow.scaled_spacing());
- outerExpoly = make_brim_ears_auto(innerExpoly, size_ear, ear_detection_length, brim_ears_max_angle, true);
- }else {
- outerExpoly = offset_ex(innerExpoly, brim_width_mod, jtRound, SCALED_RESOLUTION);
- }
- append(brim_area_object, diff_ex(outerExpoly, innerExpoly));
- }
- if (has_inner_brim) {
- ExPolygons outerExpoly;
- auto innerExpoly = offset_ex(ex_poly_holes_reversed, -brim_width - brim_offset);
- if (use_brim_ears) {
- outerExpoly = make_brim_ears(object, flowWidth, brim_offset, flow, false);
- } else if (use_auto_brim_ears) {
- coord_t size_ear = (brim_width - brim_offset - flow.scaled_spacing());
- outerExpoly = make_brim_ears_auto(offset_ex(ex_poly_holes_reversed, -brim_offset), size_ear, ear_detection_length, brim_ears_max_angle, false);
- }else {
- outerExpoly = offset_ex(ex_poly_holes_reversed, -brim_offset);
- }
- append(brim_area_object, intersection_ex(diff_ex(outerExpoly, innerExpoly), ex_poly_holes_reversed));
- }
- if (!has_inner_brim) {
- // BBS: brim should be apart from holes
- append(no_brim_area_object, diff_ex(ex_poly_holes_reversed, offset_ex(ex_poly_holes_reversed, -no_brim_offset)));
- }
- if (!has_outer_brim)
- append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly_holes_reversed));
- append(holes_object, ex_poly_holes_reversed);
+ ExPolygons volume_group_slices_efc;
+ const ExPolygons* volume_group_slices = &volumeGroup.slices;
+ if (use_efc_outline) {
+ //ORCA: When using EFC outline, restrict per-volume-group slices to the
+ // EFC-adjusted bottom footprint to keep brim width heuristics consistent.
+ volume_group_slices_efc = intersection_ex(*brim_slices, volumeGroup.slices);
+ volume_group_slices = &volume_group_slices_efc;
}
- }
- auto objectIsland = offset_ex(object->layers().front()->lslices, brim_offset, jtRound, SCALED_RESOLUTION);
+ for (const ExPolygon& ex_poly : *volume_group_slices) {
+ // BBS: additional brim width will be added if part's adhesion area is too small and brim is not generated
+ float brim_width_mod;
+ if (brim_width < scale_(5.) && has_brim_auto && groupHeight > 10.) {
+ brim_width_mod = ex_poly.area() / ex_poly.contour.length() < scaled_half_min_adh_length
+ && brim_width < scaled_flow_width ? brim_width + scaled_additional_brim_width : brim_width;
+ }
+ else {
+ brim_width_mod = brim_width;
+ }
+ //BBS: brim width should be limited to the 1.5*boundingboxSize of a single polygon.
+ if (has_brim_auto) {
+ BoundingBox bbox2 = ex_poly.contour.bounding_box();
+ brim_width_mod = std::min(brim_width_mod, float(std::max(bbox2.size()(0), bbox2.size()(1))));
+ }
+ brim_width_mod = floor(brim_width_mod / scaled_flow_width / 2) * scaled_flow_width * 2;
+
+ Polygons ex_poly_holes_reversed = ex_poly.holes;
+ polygons_reverse(ex_poly_holes_reversed);
+
+ if (has_outer_brim) {
+ // BBS: inner and outer boundary are offset from the same polygon incase of round off error.
+ auto innerExpoly = offset_ex(ex_poly.contour, brim_offset, jtRound, SCALED_RESOLUTION);
+ ExPolygons outerExpoly;
+ if (use_brim_ears) {
+ outerExpoly = make_brim_ears(object, flowWidth, brim_offset, flow, true);
+ //outerExpoly = offset_ex(outerExpoly, brim_width_mod, jtRound, SCALED_RESOLUTION);
+ } else if (use_auto_brim_ears) {
+ coord_t size_ear = (brim_width_mod - brim_offset - flow.scaled_spacing());
+ outerExpoly = make_brim_ears_auto(innerExpoly, size_ear, ear_detection_length, brim_ears_max_angle, true);
+ }else {
+ outerExpoly = offset_ex(innerExpoly, brim_width_mod, jtRound, SCALED_RESOLUTION);
+ }
+ append(brim_area_object, diff_ex(outerExpoly, innerExpoly));
+ }
+ if (has_inner_brim) {
+ ExPolygons outerExpoly;
+ auto innerExpoly = offset_ex(ex_poly_holes_reversed, -brim_width - brim_offset);
+ if (use_brim_ears) {
+ outerExpoly = make_brim_ears(object, flowWidth, brim_offset, flow, false);
+ } else if (use_auto_brim_ears) {
+ coord_t size_ear = (brim_width - brim_offset - flow.scaled_spacing());
+ outerExpoly = make_brim_ears_auto(offset_ex(ex_poly_holes_reversed, -brim_offset), size_ear, ear_detection_length, brim_ears_max_angle, false);
+ }else {
+ outerExpoly = offset_ex(ex_poly_holes_reversed, -brim_offset);
+ }
+ append(brim_area_object, intersection_ex(diff_ex(outerExpoly, innerExpoly), ex_poly_holes_reversed));
+ }
+ if (!has_inner_brim) {
+ // BBS: brim should be apart from holes
+ append(no_brim_area_object, diff_ex(ex_poly_holes_reversed, offset_ex(ex_poly_holes_reversed, -no_brim_offset)));
+ }
+ if (!has_outer_brim)
+ append(no_brim_area_object, diff_ex(offset(ex_poly.contour, no_brim_offset), ex_poly_holes_reversed));
+ append(holes_object, ex_poly_holes_reversed);
+ }
+ }
+ auto objectIsland = offset_ex(*brim_slices, brim_offset, jtRound, SCALED_RESOLUTION);
append(no_brim_area_object, objectIsland);
brimToWrite.at(object->id()).obj = false;
@@ -1261,393 +809,8 @@ static Polylines connect_brim_lines(Polylines &&polylines, const Polygons &brim_
return std::move(polylines);
}
-
-// BBS: this function is used to generate brim for inner island inside holes
-// Collect island + brim area to be minused when generating inner brim for holes
-static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtrs& top_level_objects_with_brim,
- ExtrusionEntityCollection &brim, ExPolygons &islands_area_ex)
-{
- const auto scaled_resolution = scaled(print.config().resolution.value);
-
- auto save_polygon_if_is_inner_island = [scaled_resolution](const Polygons& holes_area, Polygon& contour, std::map& hole_island_pair) {
- for (size_t i = 0; i < holes_area.size(); i++) {
- Polygons contour_polys;
- contour_polys.push_back(contour);
- if (diff_ex(contour_polys, { holes_area[i] }).empty()) {
- // BBS: this is an inner island inside holes_area[i], save
- contour.douglas_peucker(scaled_resolution);
- hole_island_pair[i].push_back(contour);
- break;
- }
- }
- };
-
- Flow flow = print.brim_flow();
- for (const PrintObject* object : top_level_objects_with_brim) {
- const BrimType brim_type = object->config().brim_type.value;
- // BBS: don't need to handle this object if hasn't enabled outer_brim
- if (brim_type == BrimType::btNoBrim)
- continue;
-
- //BBS: 1 collect holes area which is used to limit the brim of inner island
- Polygons holes_area;
- for (const ExPolygon& ex_poly : object->layers().front()->lslices)
- polygons_append(holes_area, ex_poly.holes);
-
-
- //BBS: 2 get the island polygons inside holes, saved as map
- std::map hole_island_pair;
- for (const ExPolygon& ex_poly : object->layers().front()->lslices) {
- Polygon counter = ex_poly.contour;
- save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair);
- }
-
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- Polygon counter = support_contour;
- save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair);
- }
- }
-
- //BBS: 3 generate loops, only save part of loop which inside hole
- const float brim_offset = scale_(object->config().brim_object_gap.value);
- const float brim_width = scale_(object->config().brim_width.value);
- if (brim_type == BrimType::btInnerOnly) {
- // If brim_type is btInnerOnly, we actually doesn't generate loops for inner island.
- // Only update islands_area_ex and return
- for (auto it = hole_island_pair.begin(); it != hole_island_pair.end(); it++) {
- ExPolygons islands_area_ex_object = intersection_ex(offset(it->second, brim_offset), offset(holes_area[it->first], -brim_offset));
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_object, instance);
- }
- }
- else {
- size_t num_loops = size_t(floor(brim_width / float(flow.scaled_spacing())));
- for (auto it = hole_island_pair.begin(); it != hole_island_pair.end(); it++) {
- Polygons loops;
- Polygons inner_islands = offset(it->second, brim_offset);
- Polygons brimable_area = offset(holes_area[it->first], -brim_offset); //offset to keep away from hole
- Polygons contour = inner_islands;
- for (size_t i = 0; i < num_loops; ++i) {
- contour = offset(contour, float(flow.scaled_spacing()), jtSquare);
- for (Polygon& poly : contour)
- poly.douglas_peucker(scaled_resolution);
- polygons_append(loops, offset(contour, -0.5f * float(flow.scaled_spacing())));
- }
- // BBS: to be checked.
- //loops = union_pt_chained_outside_in(loops, false);
- loops = union_pt_chained_outside_in(loops);
-
- std::vector loops_pl_by_levels;
- {
- Polylines loops_pl = to_polylines(loops);
- loops_pl_by_levels.assign(loops_pl.size(), Polylines());
- tbb::parallel_for(tbb::blocked_range(0, loops_pl.size()),
- [&loops_pl_by_levels, &loops_pl, &brimable_area](const tbb::blocked_range& range) {
- for (size_t i = range.begin(); i < range.end(); ++i) {
- loops_pl_by_levels[i] = chain_polylines(intersection_pl({ std::move(loops_pl[i]) }, brimable_area));
- }
- });
- }
-
- // BBS: Reduce down to the ordered list of polylines.
- Polylines all_loops_object;
- for (Polylines& polylines : loops_pl_by_levels)
- append(all_loops_object, std::move(polylines));
- loops_pl_by_levels.clear();
-
- optimize_polylines_by_reversing(&all_loops_object);
- all_loops_object = connect_brim_lines(std::move(all_loops_object), offset(inner_islands, float(SCALED_EPSILON)), float(flow.scaled_spacing()) * 2.f);
-
- Polylines final_loops;
- for (const PrintInstance& instance : object->instances()) {
- size_t dst_idx = final_loops.size();
- final_loops.insert(final_loops.end(), all_loops_object.begin(), all_loops_object.end());
- Point instance_shift = instance.shift_without_plate_offset();
- for (; dst_idx < final_loops.size(); ++dst_idx)
- final_loops[dst_idx].translate(instance_shift);
-
- }
- extrusion_entities_append_loops_and_paths(brim.entities, std::move(final_loops),
- erBrim, float(flow.mm3_per_mm()), float(flow.width()),
- float(print.skirt_first_layer_height()));
-
- //BBS: save all inner island and inner island brim area here, which is necesary if generate inner brim for holes
- //Inner brim of holes must not occupy this area
- ExPolygons islands_area_ex_object = intersection_ex(contour, brimable_area);
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_object, instance);
- }
- }
- }
-}
-
-//BBS: the brim are generated one by one, and sorted by objs/supports and extruders
-static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtrs& top_level_objects_with_brim,
- std::map& innerbrimAreaMap,
- std::map& innerSupportBrimAreaMap,
- ExPolygons& islands_area_ex, ExPolygons& NobrimArea,
- std::vector>& objPrintVec)
-{
- auto save_polygon_if_is_inner_island = [](const Polygons& holes_area, Polygon& counter, std::map& hole_island_pair) {
- for (size_t i = 0; i < holes_area.size(); i++) {
- if (diff_ex(Polygons{ counter }, { holes_area[i] }).empty()) {
- // BBS: this is an inner island inside holes_area[i], save
- counter.douglas_peucker(SCALED_RESOLUTION);
- hole_island_pair[i].push_back(counter);
- break;
- }
- }
- };
-
- unsigned int support_material_extruder = 1;
- if (print.has_support_material()) {
- assert(top_level_objects_with_brim.front()->config().support_filament >= 0);
- if (top_level_objects_with_brim.front()->config().support_filament > 0)
- support_material_extruder = top_level_objects_with_brim.front()->config().support_filament;
- }
-
- std::unordered_set top_level_objects_idx;
- top_level_objects_idx.reserve(top_level_objects_with_brim.size());
- for (const PrintObject* object : top_level_objects_with_brim)
- top_level_objects_idx.insert(object->id().id);
-
- struct brimWritten {
- bool obj;
- bool sup;
- };
- std::map brimToWrite;
- for (const auto& objectWithExtruder : objPrintVec)
- if (top_level_objects_idx.find(objectWithExtruder.first.id) != top_level_objects_idx.end())
- brimToWrite.insert({ objectWithExtruder.first, {true,true} });
-
- Flow flow = print.brim_flow();
- for (unsigned int extruderNo : print.extruders()) {
- ++extruderNo;
- for (const auto& objectWithExtruder : objPrintVec) {
- if (top_level_objects_idx.find(objectWithExtruder.first.id) != top_level_objects_idx.end()) {
- const PrintObject* object = print.get_object(objectWithExtruder.first);
- const BrimType brim_type = object->config().brim_type.value;
- // BBS: don't need to handle this object if hasn't enabled outer_brim
- if (brim_type == BrimType::btNoBrim)
- continue;
-
- //BBS: 1 collect holes area which is used to limit the brim of inner island
- Polygons holes_area;
- for (const ExPolygon& ex_poly : object->layers().front()->lslices)
- polygons_append(holes_area, ex_poly.holes);
-
-
- //BBS: 2 get the island polygons inside holes, saved as map
- std::map hole_island_pair;
- for (const ExPolygon& ex_poly : object->layers().front()->lslices) {
- Polygon counter = ex_poly.contour;
- save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair);
- }
- std::map hole_island_pair_supports;
- if (!object->support_layers().empty()) {
- for (const Polygon& support_contour : object->support_layers().front()->support_fills.polygons_covered_by_spacing()) {
- Polygon counter = support_contour;
- save_polygon_if_is_inner_island(holes_area, counter, hole_island_pair_supports);
- }
- }
-
- //BBS: 3 generate loops, only save part of loop which inside hole
- const float brim_offset = scale_(object->config().brim_object_gap.value);
- const float brim_width = floor(scale_(object->config().brim_width.value) / 2 / flow.scaled_spacing()) * 2 * flow.scaled_spacing();
- if (objectWithExtruder.second == extruderNo && brimToWrite.at(object->id()).obj) {
- if (brim_type == BrimType::btInnerOnly) {
- // If brim_type is btInnerOnly, we actually doesn't generate loops for inner island.
- // Only update islands_area_ex and return
- for (auto it = hole_island_pair.begin(); it != hole_island_pair.end(); it++) {
- ExPolygons islands_area_ex_object = intersection_ex(offset(it->second, brim_offset), offset(holes_area[it->first], -brim_offset));
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_object, instance);
- }
- brimToWrite.at(object->id()).obj = false;
- }
- else {
- for (auto it = hole_island_pair.begin(); it != hole_island_pair.end(); it++) {
- Polygons loops;
- Polygons inner_islands = offset(it->second, brim_offset);
- Polygons brimable_area = offset(holes_area[it->first], -brim_offset); //offset to keep away from hole
- Polygons contour = offset(inner_islands, brim_offset + brim_width, jtRound, SCALED_RESOLUTION);
- for (Polygon& poly : contour)
- poly.douglas_peucker(SCALED_RESOLUTION);
-
-
- //BBS: save all inner island and inner island brim area here, which is necesary if generate inner brim for holes
- //Inner brim of holes must not occupy this area
- ExPolygons islands_area_ex_object = intersection_ex(contour, brimable_area);
- ExPolygons inner_islands_exp = offset_ex(inner_islands, 0.);
- islands_area_ex_object = diff_ex(islands_area_ex_object, inner_islands_exp);
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_object, instance, print, innerbrimAreaMap);
- }
- brimToWrite.at(object->id()).obj = false;
- }
- if (innerbrimAreaMap.find(object->id()) != innerbrimAreaMap.end())
- expolygons_append(islands_area_ex, innerbrimAreaMap[object->id()]);
- }
-
-
- if (support_material_extruder == extruderNo && brimToWrite.at(object->id()).sup) {
- if (brim_type == BrimType::btInnerOnly) {
- // If brim_type is btInnerOnly, we actually doesn't generate loops for inner island.
- // Only update islands_area_ex and return
- for (auto it = hole_island_pair_supports.begin(); it != hole_island_pair_supports.end(); it++) {
- ExPolygons islands_area_ex_support = intersection_ex(offset(it->second, 0), offset(holes_area[it->first], 0));
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_support, instance);
- }
- brimToWrite.at(object->id()).sup = false;
- }
- else {
- for (auto it = hole_island_pair_supports.begin(); it != hole_island_pair_supports.end(); it++) {
- Polygons loops;
- Polygons inner_islands = offset(it->second, 0);
- Polygons brimable_area = offset(holes_area[it->first], -float(flow.scaled_spacing())); //offset to keep away from hole
- Polygons contour = offset(inner_islands, brim_width, jtRound, SCALED_RESOLUTION);
- for (Polygon& poly : contour)
- poly.douglas_peucker(SCALED_RESOLUTION);
-
-
- //BBS: save all inner island and inner island brim area here, which is necesary if generate inner brim for holes
- //Inner brim of holes must not occupy this area
- ExPolygons islands_area_ex_support = intersection_ex(contour, brimable_area);
- ExPolygons inner_islands_exp = offset_ex(inner_islands, 0.);
- islands_area_ex_support = diff_ex(islands_area_ex_support, inner_islands_exp);
- for (const PrintInstance& instance : object->instances())
- append_and_translate(islands_area_ex, islands_area_ex_support, instance, print, innerSupportBrimAreaMap);
-
- }
- brimToWrite.at(object->id()).sup = false;
- }
- if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end())
- expolygons_append(islands_area_ex, innerSupportBrimAreaMap[object->id()]);
- }
- }
- }
- }
- islands_area_ex = diff_ex(islands_area_ex, NobrimArea);
- for (const PrintObject* object : print.objects()) {
- if (innerbrimAreaMap.find(object->id()) != innerbrimAreaMap.end())
- innerbrimAreaMap[object->id()] = diff_ex(innerbrimAreaMap[object->id()], NobrimArea);
- if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end())
- innerSupportBrimAreaMap[object->id()] = diff_ex(innerSupportBrimAreaMap[object->id()], NobrimArea);
- }
-}
-static void make_inner_brim(const Print &print,
- const ConstPrintObjectPtrs &top_level_objects_with_brim,
- const std::vector &bottom_layers_expolygons,
- ExtrusionEntityCollection &brim)
-{
- assert(print.objects().size() == bottom_layers_expolygons.size());
- const auto scaled_resolution = scaled(print.config().resolution.value);
-
- //BBS: generate brim for inner island first
- ExPolygons inner_islands_ex;
- make_inner_island_brim(print, top_level_objects_with_brim, brim, inner_islands_ex);
-
-#ifdef INNER_ISLAND_BRIM_DEBUG_TO_SVG
- static int irun = 0;
- BoundingBox bbox_svg;
- bbox_svg.merge(get_extents(inner_islands_ex));
- {
- std::stringstream stri;
- stri << "inner_island_and_brim_area_" << irun << ".svg";
- SVG svg(stri.str(), bbox_svg);
- svg.draw(to_polylines(inner_islands_ex), "blue");
- svg.Close();
- }
- ++ irun;
-#endif
-
- Flow flow = print.brim_flow();
- ExPolygons islands_ex = inner_brim_area(print, top_level_objects_with_brim, bottom_layers_expolygons, float(flow.scaled_spacing()));
- //BBS: brim of hole must not overlap with inner island and inner island brim
- if (!inner_islands_ex.empty()) {
- islands_ex = diff_ex(islands_ex, inner_islands_ex);
- }
-
- Polygons loops;
- islands_ex = offset_ex(islands_ex, -0.5f * float(flow.scaled_spacing()));// jtSquare seems not working when expandign the holes
- for (size_t i = 0; !islands_ex.empty(); ++i) {
- for (ExPolygon &poly_ex : islands_ex)
- poly_ex.douglas_peucker(scaled_resolution);
- polygons_append(loops, to_polygons(islands_ex));// jtSquare seems not working when expandign the holes
- islands_ex = offset_ex(islands_ex, -1.3f * float(flow.scaled_spacing()));
- islands_ex = offset_ex(islands_ex, .3f * float(flow.scaled_spacing()));
- }
-
- loops = union_pt_chained_outside_in(loops);
- std::reverse(loops.begin(), loops.end());
- extrusion_entities_append_loops(brim.entities, std::move(loops), erBrim, float(flow.mm3_per_mm()),
- float(flow.width()), float(print.skirt_first_layer_height()));
-}
-
-// BBS: generate inner brim by objs
-static void make_inner_brim(const Print& print, const ConstPrintObjectPtrs& top_level_objects_with_brim,
- std::map& brimAreaMap, std::map& supportBrimAreaMap,
- std::vector>& objPrintVec)
-{
- //BBS: generate brim for inner island first
-
-
-#ifdef INNER_ISLAND_BRIM_DEBUG_TO_SVG
- static int irun = 0;
- BoundingBox bbox_svg;
- bbox_svg.merge(get_extents(inner_islands_ex));
- {
- std::stringstream stri;
- stri << "inner_island_and_brim_area_" << irun << ".svg";
- SVG svg(stri.str(), bbox_svg);
- svg.draw(to_polylines(inner_islands_ex), "blue");
- svg.Close();
- }
- ++irun;
-#endif
-
- Flow flow = print.brim_flow();
- ExPolygons NoBrim = inner_brim_area(print, top_level_objects_with_brim,
- float(flow.scaled_spacing()), brimAreaMap, supportBrimAreaMap, objPrintVec);
-
- ExPolygons inner_islands_ex;
- std::map innerBrimAreaMap;
- std::map innerSupportBrimAreaMap;
- /*make_inner_island_brim(print, top_level_objects_with_brim, innerBrimAreaMap, innerSupportBrimAreaMap,
- inner_islands_ex, NoBrim, objPrintVec);*/
-
- //BBS: brim of hole must not overlap with inner island and inner island brim
- if (!inner_islands_ex.empty()) {
- if (brimAreaMap.size() > 0) {
- for (auto iter = brimAreaMap.begin(); iter != brimAreaMap.end(); ++iter) {
- if (!iter->second.empty()) {
- iter->second = diff_ex(iter->second, inner_islands_ex);
- };
- }
- }
- if (supportBrimAreaMap.size() > 0) {
- for (auto iter = supportBrimAreaMap.begin(); iter != supportBrimAreaMap.end(); ++iter) {
- if (!iter->second.empty()) {
- iter->second = diff_ex(iter->second, inner_islands_ex);
- };
- }
- }
- for (const PrintObject* object : print.objects()) {
- if (innerBrimAreaMap.find(object->id()) != innerBrimAreaMap.end()) {
- append(brimAreaMap[object->id()], innerBrimAreaMap[object->id()]);
- }
- if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end()) {
- append(supportBrimAreaMap[object->id()], innerSupportBrimAreaMap[object->id()]);
- }
- }
- }
-}
-
-
//BBS: generate out brim by offseting ExPolygons 'islands_area_ex'
-Polygons tryExPolygonOffset(const ExPolygons islandAreaEx, const Print& print)
+Polygons tryExPolygonOffset(const ExPolygons& islandAreaEx, const Print& print)
{
const auto scaled_resolution = scaled(print.config().resolution.value);
Polygons loops;
@@ -1718,8 +881,6 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_
std::vector> &objPrintVec,
std::vector& printExtruders)
{
-
- double brim_width_max = 0;
std::map brim_width_map;
std::map brimAreaMap;
std::map supportBrimAreaMap;
@@ -1732,7 +893,10 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_
for (const ObjectID printObjID : print.print_object_ids()) {
BoundingBox bbx;
PrintObject* object = const_cast(print.get_object(printObjID));
- for (const ExPolygon& ex_poly : object->layers().front()->lslices)
+ //ORCA: Use EFC-compensated outline for brim bounding box when enabled.
+ const ExPolygons brim_slices = use_brim_efc_outline(*object) ?
+ get_print_object_bottom_layer_expolygons(*object) : object->layers().front()->lslices;
+ for (const ExPolygon& ex_poly : brim_slices)
for (const PrintInstance& instance : object->instances()) {
auto ex_poly_translated = ex_poly;
ex_poly_translated.translate(instance.shift_without_plate_offset());
@@ -1774,9 +938,6 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_
supportBrimMap.insert(std::make_pair(iter->first, makeBrimInfill(iter->second, print, islands_area)));
};
}
-
- size_t num_loops = size_t(floor(brim_width_max / flow.spacing()));
- BOOST_LOG_TRIVIAL(debug) << "brim_width_max, num_loops: " << brim_width_max << ", " << num_loops;
}
} // namespace Slic3r
diff --git a/src/libslic3r/Clipper2Utils.cpp b/src/libslic3r/Clipper2Utils.cpp
index 9f1f678a9c..12fd867500 100644
--- a/src/libslic3r/Clipper2Utils.cpp
+++ b/src/libslic3r/Clipper2Utils.cpp
@@ -35,6 +35,11 @@ Clipper2Lib::Paths64 Slic3rPoints_to_Paths64(const Container& in)
return out;
}
+Clipper2Lib::Paths64 Slic3rPolylines_to_Paths64(const Polylines& in)
+{
+ return Slic3rPoints_to_Paths64(in);
+}
+
Points Path64ToPoints(const Clipper2Lib::Path64& path64)
{
Points points;
diff --git a/src/libslic3r/Clipper2Utils.hpp b/src/libslic3r/Clipper2Utils.hpp
index c5485ad1bd..54b48d6bd7 100644
--- a/src/libslic3r/Clipper2Utils.hpp
+++ b/src/libslic3r/Clipper2Utils.hpp
@@ -4,9 +4,12 @@
#include "ExPolygon.hpp"
#include "Polygon.hpp"
#include "Polyline.hpp"
+#include "clipper2/clipper.h"
namespace Slic3r {
+Clipper2Lib::Paths64 Slic3rPolylines_to_Paths64(const Slic3r::Polylines& in);
+Slic3r::Polylines Paths64_to_polylines(const Clipper2Lib::Paths64& in);
Slic3r::Polylines intersection_pl_2(const Slic3r::Polylines& subject, const Slic3r::Polygons& clip);
Slic3r::Polylines diff_pl_2(const Slic3r::Polylines& subject, const Slic3r::Polygons& clip);
ExPolygons union_ex_2(const Polygons &expolygons);
diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp
index 2e6f7efd9d..a9b5099383 100644
--- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp
+++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp
@@ -162,8 +162,8 @@ void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice
}
if (ext_lines.back().p == ext_lines.front().p) { // Connect endpoints.
- out.front().p = out.back().p;
- out.front().w = out.back().w;
+ out.back().p = out.front().p;
+ out.back().w = out.front().w;
}
if (out.size() >= 3)
diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 34a1ff1b50..de4aaeacd3 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -200,6 +200,10 @@ void Fill3DHoneycomb::_fill_surface_single(
if (std::abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle);
BoundingBox bb = expolygon.contour.bounding_box();
+ // Expand the bounding box to avoid artifacts at the edges
+ coord_t expand = 5 * (scale_(this->spacing));
+ bb.offset(expand);
+
// Note: with equally-scaled X/Y/Z, the pattern will create a vertically-stretched
// truncated octahedron; so Z is pre-adjusted first by scaling by sqrt(2)
coordf_t zScale = sqrt(2);
diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp
index ed3bfcf0a0..344bb529f0 100644
--- a/src/libslic3r/Fill/FillAdaptive.cpp
+++ b/src/libslic3r/Fill/FillAdaptive.cpp
@@ -1371,42 +1371,47 @@ void Filler::_fill_surface_single(
all_polylines.reserve(lines.size());
std::transform(lines.begin(), lines.end(), std::back_inserter(all_polylines), [](const Line& l) { return Polyline{ l.a, l.b }; });
- // Apply multiline offset if needed
- multiline_fill(all_polylines, params, spacing);
+ // Apply multiline offset if needed
+ multiline_fill(all_polylines, params, spacing);
// Crop all polylines
all_polylines = intersection_pl(std::move(all_polylines), expolygon);
#endif
}
- // After intersection_pl some polylines with only one line are split into more lines
- for (Polyline &polyline : all_polylines) {
- //FIXME assert that all the points are collinear and in between the start and end point.
- if (polyline.points.size() > 2)
- polyline.points.erase(polyline.points.begin() + 1, polyline.points.end() - 1);
- }
-// assert(has_no_collinear_lines(all_polylines));
+ if (params.multiline == 1) {
+ // After intersection_pl some polylines with only one line are split into more lines
+ for (Polyline& polyline : all_polylines) {
+ // FIXME assert that all the points are collinear and in between the start and end point.
+ if (polyline.points.size() > 2)
+ polyline.points.erase(polyline.points.begin() + 1, polyline.points.end() - 1);
+ }
+ // assert(has_no_collinear_lines(all_polylines));
#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
- {
- static int iRun = 0;
- export_infill_lines_to_svg(expolygon, all_polylines, debug_out_path("FillAdaptive-initial-%d.svg", iRun++));
- }
+ {
+ static int iRun = 0;
+ export_infill_lines_to_svg(expolygon, all_polylines, debug_out_path("FillAdaptive-initial-%d.svg", iRun++));
+ }
#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
- const auto hook_length = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length)));
- const auto hook_length_max = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length_max)));
+ const auto hook_length = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length)));
+ const auto hook_length_max = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length_max)));
Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length, hook_length_max) : std::move(all_polylines);
#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
- {
- static int iRun = 0;
- export_infill_lines_to_svg(expolygon, all_polylines_with_hooks, debug_out_path("FillAdaptive-hooks-%d.svg", iRun++));
- }
+ {
+ static int iRun = 0;
+ export_infill_lines_to_svg(expolygon, all_polylines_with_hooks, debug_out_path("FillAdaptive-hooks-%d.svg", iRun++));
+ }
#endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */
- chain_or_connect_infill(std::move(all_polylines_with_hooks), expolygon, polylines_out, this->spacing, params);
+ chain_or_connect_infill(std::move(all_polylines_with_hooks), expolygon, polylines_out, this->spacing, params);
+ } else {
+ // if multiline is > 1 infill is ready to connect
+ chain_or_connect_infill(std::move(all_polylines), expolygon, polylines_out, this->spacing, params);
+ }
#ifdef ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT
{
@@ -1443,6 +1448,17 @@ static std::vector make_cubes_properties(double max_cube_edge_le
if (edge_length > max_cube_edge_length)
break;
}
+ // Orca: Ensure at least 2 levels so build_octree() will insert triangles.
+ // Fixes scenario where adaptive fill is disconnected from walls on low densities
+ if (cubes_properties.size() == 1) {
+ CubeProperties p = cubes_properties.back();
+ p.edge_length *= 2.0;
+ p.height = p.edge_length * sqrt(3);
+ p.diagonal_length = p.edge_length * sqrt(2);
+ p.line_z_distance = p.edge_length / sqrt(3);
+ p.line_xy_distance = p.edge_length / sqrt(6);
+ cubes_properties.push_back(p);
+ }
return cubes_properties;
}
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 3a9412119f..eff83efe3e 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -3,6 +3,7 @@
#include
#include "../ClipperUtils.hpp"
+#include "../Clipper2Utils.hpp"
#include "../EdgeGrid.hpp"
#include "../Geometry.hpp"
#include "../Geometry/Circle.hpp"
@@ -1706,6 +1707,12 @@ void Fill::connect_infill(Polylines &&infill_ordered, const std::vectorcontour_idx];
+
+ // Orca: If multiline infill is requested, skip connections that are too short.
+ if (params.multiline > 1 && arc.arc_length < scale_(spacing) * params.multiline) {
+ continue;
+ }
+
const std::vector &contour_params = graph.boundary_params[cp1->contour_idx];
if (polyline_idx1 != polyline_idx2) {
Polyline &polyline1 = infill_ordered[polyline_idx1];
@@ -2699,60 +2706,77 @@ void Fill::connect_base_support(Polylines &&infill_ordered, const Polygons &boun
connect_base_support(std::move(infill_ordered), polygons_src, bbox, polylines_out, spacing, params);
}
-//Fill Multiline
+// Fill Multiline -Clipper2 version
void multiline_fill(Polylines& polylines, const FillParams& params, float spacing)
{
- if (params.multiline > 1) {
- const int n_lines = params.multiline;
- const int n_polylines = static_cast(polylines.size());
- Polylines all_polylines;
- all_polylines.reserve(n_lines * n_polylines);
+ if (params.multiline <= 1)
+ return;
- const float center = (n_lines - 1) / 2.0f;
+ const int n_lines = params.multiline;
+ const int n_polylines = static_cast(polylines.size());
+ Polylines all_polylines;
+ all_polylines.reserve(n_lines * n_polylines);
- for (int line = 0; line < n_lines; ++line) {
- float offset = scale_((static_cast(line) - center) * spacing);
+ // Remove invalid polylines
+ polylines.erase(std::remove_if(polylines.begin(), polylines.end(),
+ [](const Polyline& p) { return p.size() < 2; }),
+ polylines.end());
- for (const Polyline& pl : polylines) {
- const size_t n = pl.points.size();
- if (n < 2) {
- all_polylines.emplace_back(pl);
- continue;
- }
+ if (polylines.empty())
+ return;
+ // Convert source polylines to Clipper2 paths
+ Clipper2Lib::Paths64 subject_paths = Slic3rPolylines_to_Paths64(polylines);
- Points new_points;
- new_points.reserve(n);
- for (size_t i = 0; i < n; ++i) {
- Vec2f tangent;
- // For the first and last point, if the polyline is a
- // closed loop, get the tangent from the points on either
- // side of the join, otherwise just use the first or last
- // line.
- if (i == 0) {
- if (pl.points[0] == pl.points[n-1]) {
- tangent = (pl.points[1] - pl.points[n-2]).template cast().normalized();
- } else {
- tangent = (pl.points[1] - pl.points[0]).template cast().normalized();
- }
- } else if (i == n - 1) {
- if (pl.points[0] == pl.points[n-1]) {
- tangent = (pl.points[1] - pl.points[n-2]).template cast().normalized();
- } else {
- tangent = (pl.points[n-1] - pl.points[n-2]).template cast().normalized();
- }
- } else
- tangent = (pl.points[i+1] - pl.points[i-1]).template cast().normalized();
- Vec2f normal(-tangent.y(), tangent.x());
+ const double miter_limit = 2.0;
+ const int rings = n_lines / 2;
- Point p = pl.points[i] + (normal * offset).template cast();
- new_points.push_back(p);
- }
+ // Compute offsets (in units of spacing)
+ std::vector offsets;
+ offsets.reserve(n_lines);
- all_polylines.emplace_back(std::move(new_points));
- }
- }
- polylines = std::move(all_polylines);
+ if (n_lines % 2 != 0) {
+ // Odd: center line at offset = 0
+ offsets.push_back(0.0);
+
+ for (int i = 1; i <= rings; ++i)
+ offsets.push_back(i * spacing);
+ } else {
+ // Even: no center, start at 0.5 * spacing
+ double start = 0.5 * spacing;
+ for (int i = 0; i < rings; ++i)
+ offsets.push_back(start + i * spacing);
}
+
+ // Process each offset
+ Clipper2Lib::ClipperOffset offsetter(miter_limit);
+ offsetter.AddPaths(subject_paths, Clipper2Lib::JoinType::Round, Clipper2Lib::EndType::Round);
+
+ for (double t : offsets) {
+ if (t == 0.0) {
+ // Center line (only applies when n_lines is odd)
+ all_polylines.insert(all_polylines.end(), polylines.begin(), polylines.end());
+ continue;
+ }
+
+ // ClipperOffset with current offset distance (union is not needed here)
+ Clipper2Lib::Paths64 offset_paths;
+ offsetter.Execute(scale_(t), offset_paths);
+ if (offset_paths.empty())
+ continue;
+
+ // Convert back to polylines
+ Polylines new_polylines = Paths64_to_polylines(offset_paths);
+
+ for (Polyline& pl : new_polylines) {
+ if (pl.points.size() < 3)
+ continue;
+ if (pl.points.front() != pl.points.back())
+ pl.points.push_back(pl.points.front());
+ all_polylines.emplace_back(std::move(pl));
+ }
+ }
+
+ polylines = std::move(all_polylines);
}
} // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp
index 93a54a0739..4f2a0b8970 100644
--- a/src/libslic3r/Fill/FillConcentric.cpp
+++ b/src/libslic3r/Fill/FillConcentric.cpp
@@ -19,7 +19,7 @@ void FillConcentric::_fill_surface_single(
// no rotation is supported for this infill pattern
BoundingBox bounding_box = expolygon.contour.bounding_box();
- coord_t min_spacing = scale_(this->spacing);
+ coord_t min_spacing = scale_(this->spacing) * params.multiline;
coord_t distance = coord_t(min_spacing / params.density);
if (params.density > 0.9999f && !params.dont_adjust) {
@@ -27,8 +27,12 @@ void FillConcentric::_fill_surface_single(
this->spacing = unscale(distance);
}
- Polygons loops = to_polygons(expolygon);
- ExPolygons last { std::move(expolygon) };
+ // Contract surface polygon by half line width to avoid excesive overlap with perimeter
+ ExPolygons contracted = offset_ex(expolygon, -float(scale_(0.5 * (params.multiline - 1) * this->spacing )));
+
+ Polygons loops = to_polygons(contracted);
+
+ ExPolygons last { std::move(contracted) };
while (! last.empty()) {
last = offset2_ex(last, -(distance + min_spacing/2), +min_spacing/2);
append(loops, to_polygons(last));
@@ -46,6 +50,9 @@ void FillConcentric::_fill_surface_single(
last_pos = polylines_out.back().last_point();
}
+ // Apply multiline offset if needed
+ multiline_fill(polylines_out, params, spacing);
+
// clip the paths to prevent the extruder from getting exactly on the first point of the loop
// Keep valid paths only.
size_t j = iPathFirst;
diff --git a/src/libslic3r/Fill/FillHoneycomb.cpp b/src/libslic3r/Fill/FillHoneycomb.cpp
index e750425a82..a595cdb664 100644
--- a/src/libslic3r/Fill/FillHoneycomb.cpp
+++ b/src/libslic3r/Fill/FillHoneycomb.cpp
@@ -74,7 +74,7 @@ void FillHoneycomb::_fill_surface_single(
}
}
// Apply multiline offset if needed
- multiline_fill(all_polylines, params, 1.1 * spacing);
+ multiline_fill(all_polylines, params, spacing);
all_polylines = intersection_pl(std::move(all_polylines), expolygon);
chain_or_connect_infill(std::move(all_polylines), expolygon, polylines_out, this->spacing, params);
diff --git a/src/libslic3r/Fill/FillPlanePath.cpp b/src/libslic3r/Fill/FillPlanePath.cpp
index 6044ba43a2..b4681d05f9 100644
--- a/src/libslic3r/Fill/FillPlanePath.cpp
+++ b/src/libslic3r/Fill/FillPlanePath.cpp
@@ -81,6 +81,9 @@ void FillPlanePath::_fill_surface_single(
BoundingBox snug_bounding_box = get_extents(expolygon).inflated(SCALED_EPSILON);
+ // Expand the bounding box to avoid artifacts at the edges
+ snug_bounding_box.offset(scale_(this->spacing)*params.multiline);
+
// Rotated bounding box of the area to fill in with the pattern.
BoundingBox bounding_box = align ?
// Sparse infill needs to be aligned across layers. Align infill across layers using the object's bounding box.
@@ -97,7 +100,7 @@ void FillPlanePath::_fill_surface_single(
Polyline polyline;
{
- auto distance_between_lines = scaled(this->spacing) / params.density;
+ auto distance_between_lines = scaled(this->spacing) * params.multiline / params.density;
auto min_x = coord_t(ceil(coordf_t(bounding_box.min.x()) / distance_between_lines));
auto min_y = coord_t(ceil(coordf_t(bounding_box.min.y()) / distance_between_lines));
auto max_x = coord_t(ceil(coordf_t(bounding_box.max.x()) / distance_between_lines));
@@ -117,8 +120,13 @@ void FillPlanePath::_fill_surface_single(
}
}
+ Polylines polylines = {polyline};
+
+ // Apply multiline offset if needed
+ multiline_fill(polylines, params, spacing);
+
if (polyline.size() >= 2) {
- Polylines polylines = intersection_pl(polyline, expolygon);
+ polylines = intersection_pl(std::move(polylines), expolygon);
if (!polylines.empty()) {
Polylines chained;
if (params.dont_connect() || params.density > 0.5) {
diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp
index cfb9c32300..775b3e8b42 100644
--- a/src/libslic3r/Fill/FillRectilinear.cpp
+++ b/src/libslic3r/Fill/FillRectilinear.cpp
@@ -3000,7 +3000,7 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
params.density /= double(sweep_params.size());
assert(params.density > 0.0001f && params.density <= 1.f);
- ExPolygonWithOffset poly_with_offset_base(surface->expolygon, 0, float(scale_(this->overlap - 0.5 * this->spacing)));
+ ExPolygonWithOffset poly_with_offset_base(surface->expolygon, 0, float(scale_(this->overlap + 0.5 * params.multiline * this->spacing)));//increase offset to crop infill lines when using multiline infill
if (poly_with_offset_base.n_contours == 0)
// Not a single infill line fits.
return true;
@@ -3012,19 +3012,24 @@ bool FillRectilinear::fill_surface_by_multilines(const Surface *surface, FillPar
for (const SweepParams &sweep : sweep_params) {
// Rotate polygons so that we can work with vertical lines here
float angle = rotate_vector.first + sweep.angle_base;
- //Fill Multiline
- for (int i = 0; i < params.multiline; ++i) {
- coord_t group_offset = i * line_spacing;
- coord_t internal_offset = (i - (params.multiline - 1) / 2.0f) * line_width;
- coord_t total_offset = group_offset + internal_offset;
- coord_t pattern_shift = scale_(sweep.pattern_shift + unscale_(total_offset));
- make_fill_lines(ExPolygonWithOffset(poly_with_offset_base, -angle), rotate_vector.second.rotated(-angle), angle,
- line_width + coord_t(SCALED_EPSILON), line_spacing, pattern_shift, fill_lines);
- }
+ make_fill_lines(ExPolygonWithOffset(poly_with_offset_base, -angle), rotate_vector.second.rotated(-angle), angle,
+ line_width + coord_t(SCALED_EPSILON), line_spacing, coord_t(scale_(sweep.pattern_shift)), fill_lines);
}
+
+ // Apply multiline offset if needed
+ multiline_fill(fill_lines, params, spacing);
+
+ // Contract surface polygon by half line width to avoid excesive overlap with perimeter
+ ExPolygons contracted = offset_ex(surface->expolygon, -float(scale_(0.5 * this->spacing)));
+
+ // if contraction results in empty polygon, use original surface
+ const ExPolygon &intersection_surface = contracted.empty() ? surface->expolygon : contracted.front();
-if ((params.pattern == ipLateralLattice || params.pattern == ipLateralHoneycomb ) && params.multiline >1 )
+ // Intersect polylines with perimeter
+ fill_lines = intersection_pl(std::move(fill_lines), intersection_surface);
+
+ if ((params.pattern == ipLateralLattice || params.pattern == ipLateralHoneycomb ) && params.multiline >1 )
remove_overlapped(fill_lines, line_width);
if (!fill_lines.empty()) {
@@ -3033,7 +3038,260 @@ if ((params.pattern == ipLateralLattice || params.pattern == ipLateralHoneycomb
fill_lines = chain_polylines(std::move(fill_lines));
append(polylines_out, std::move(fill_lines));
} else
- connect_infill(std::move(fill_lines), poly_with_offset_base.polygons_outer, get_extents(surface->expolygon.contour), polylines_out, this->spacing, params);
+ connect_infill(std::move(fill_lines), intersection_surface, polylines_out, this->spacing, params);
+ }
+
+ return true;
+}
+
+bool FillRectilinear::fill_surface_trapezoidal(
+ const Surface* surface,
+ FillParams params,
+ const std::initializer_list& sweep_params,
+ Polylines& polylines_out,
+ int Pattern_type) // 0=grid, 1=triangular
+{
+ assert(params.multiline > 1);
+
+ Polylines polylines;
+
+ // Common parameters
+ const coord_t d1 = coord_t(scale_(this->spacing)) * params.multiline; // Infill total wall thickness
+
+ // Pattern-specific parameters
+ coord_t period;
+ double base_angle;
+ std::pair rotate_vector = this->_infill_direction(surface);
+
+ if (Pattern_type == 0) {
+ // Grid pattern parameters
+ period = coord_t((2.0 * d1 / params.density) * std::sqrt(2.0));
+ base_angle = rotate_vector.first + M_PI_4; // 45
+ } else {
+ // Triangular pattern parameters
+ period = coord_t(( 2.0 * d1 / params.density) * std::sqrt(3.0));
+ base_angle = rotate_vector.first + M_PI_2; //90
+ }
+
+ // Obtain the expolygon and rotate to align with pattern base angle
+ ExPolygon expolygon = surface->expolygon;
+ if (std::abs(base_angle) >= EPSILON) {
+ expolygon.rotate(-base_angle, rotate_vector.second);
+ }
+
+ // Use extended object bounding box for consistent pattern across layers
+ BoundingBox bb = this->extended_object_bounding_box();
+
+ switch (Pattern_type) {
+ case 0: // Grid / Trapezoidal
+ {
+ // Generate a non-crossing trapezoidal pattern to avoid overextrusion at intersections when `multiline > 1`.
+ // P1--P2
+ // / \
+ // P0/ \P3__P4
+ //
+ // P1x-P2x=P3x-P4x=d1
+ // P0y-P1y=P2y-P3y=d2
+
+ const coord_t d2 = coord_t(0.5 * period - d1);
+
+ // Align bounding box to the grid
+ bb.merge(align_to_grid(bb.min, Point(period, period)));
+ const coord_t xmin = bb.min.x();
+ const coord_t xmax = bb.max.x();
+ const coord_t ymin = bb.min.y();
+ const coord_t ymax = bb.max.y();
+
+ // Create the two base row patterns once
+ Polyline base_row_normal;
+ base_row_normal.points.reserve(((xmax - xmin) / period + 1) * 5); // 5 points per trapezoid
+ Polyline base_row_flipped;
+ base_row_flipped.points.reserve(((xmax - xmin) / period + 1) * 5); // 5 points per trapezoid
+
+ // Build complete rows from xmin to xmax
+ for (coord_t x = xmin; x < xmax; x += period) {
+ // Normal row
+ base_row_normal.points.emplace_back(Point(x, d1 / 2)); // P0
+ base_row_normal.points.emplace_back(Point(x + d1, d1 / 2)); // P1
+ base_row_normal.points.emplace_back(Point(x + d1 + d2, d1 / 2 + d2)); // P2
+ base_row_normal.points.emplace_back(Point(x + 2 * d1 + d2, d1 / 2 + d2)); // P3
+ base_row_normal.points.emplace_back(Point(x + 2 * d1 + 2 * d2, d1 / 2)); // P4
+ }
+
+ // Flipped row (mirrored vertically)
+ base_row_flipped.points = base_row_normal.points;
+ for (auto& p : base_row_flipped.points) {
+ p.y() = period / 2 - p.y();
+ }
+
+ // Pre-allocate polylines
+ const size_t estimated_rows = ((ymax - ymin) / (period / 2) + 1);
+ polylines.reserve(estimated_rows);
+
+ bool flip_vertical = false;
+
+ // Now just copy and translate vertically
+ for (coord_t y = ymin; y < ymax; y += period / 2) {
+ Polyline pl_row = flip_vertical ? base_row_flipped : base_row_normal;
+
+ // Translate all points vertically
+ for (Point& p : pl_row.points) {
+ p.y() += y;
+ }
+
+ polylines.emplace_back(std::move(pl_row));
+ flip_vertical = !flip_vertical;
+ }
+
+ // transpose points for odd layers
+ if (layer_id % 2 == 1) {
+ for (Polyline& pl : polylines) {
+ for (Point& p : pl.points) {
+ std::swap(p.x(), p.y());
+ p.x() += d1 / 2;
+ p.y() -= d1 / 2;
+ }
+ }
+ }
+ break;
+ }
+
+ case 1: // Triangular
+ {
+ // Generate a non-crossing trapezoidal pattern with a base line below.
+ // P1-P2
+ // / \
+ // P0/ \P3_P4
+ // ----------------
+ // P1x-P2x=P3x-P4x=d2
+ // P0y-P1y=P2y-P3y=h-2d1
+ //
+
+ // Triangular pattern density adjustment:
+ const coord_t d2_tri = coord_t(2.0 / std::sqrt(3.0) * d1);
+ const coord_t h = coord_t(0.5 * std::sqrt(3.0) * period); // height of triangle
+
+ // Align bounding box to the grid
+ bb.merge(align_to_grid(bb.center(), Point(period,h)));
+ const int layer_mod = layer_id % 3;
+ const double angle = layer_mod * 2.0 * M_PI / 3.0;
+
+ const Point rotation_center = bb.center();
+ const coord_t half_w = bb.size().x() / 2;
+ const coord_t half_h = bb.size().y() / 2;
+
+ // Compute how many full periods fit in each direction
+ const coord_t num_periods_x = coord_t(std::ceil(half_w / double(period)));
+ coord_t num_periods_y =coord_t(std::ceil(half_h / double(h)));
+ // Ensure an even number of rows so the pattern stays centered
+ if ((num_periods_y % 2) != 0)
+ ++num_periods_y;
+
+ // Compute aligned limits (symmetric around the origin)
+ const coord_t x_min_aligned = -num_periods_x * period;
+ const coord_t x_max_aligned = num_periods_x * period;
+ const coord_t y_min_aligned = -num_periods_y * h;
+ const coord_t y_max_aligned = num_periods_y * h;
+
+ // Pre-allocate estimated number of polylines
+ const size_t estimated_rows = (y_max_aligned - y_min_aligned) / h + 2;
+ const size_t estimated_polylines = (estimated_rows + 1) * 2; // base line + trapezoid line per row
+ polylines.reserve(estimated_polylines);
+
+ // Create the two base row templates once
+ Polyline base_line_template;
+ base_line_template.points.reserve(2); // 2 points for base line
+ Polyline trapezoid_row_normal;
+ trapezoid_row_normal.points.reserve(((x_max_aligned - x_min_aligned) / period + 1) * 5); // 5 points per trapezoid
+ Polyline trapezoid_row_shifted;
+ trapezoid_row_shifted.points.reserve(((x_max_aligned - x_min_aligned) / period + 1) * 5); // 5 points per trapezoid
+ // Build base line template (from x_min_aligned to x_max_aligned)
+ base_line_template.points.emplace_back(Point(x_min_aligned, 0));
+ base_line_template.points.emplace_back(Point(x_max_aligned, 0));
+
+ // Build complete trapezoid rows once
+ // Normal row (no shift)
+ for (coord_t x = x_min_aligned; x < x_max_aligned; x += period) {
+ trapezoid_row_normal.points.emplace_back(Point(x + d2_tri / 2, d1)); // P0
+ trapezoid_row_normal.points.emplace_back(Point(x + period / 2 - d2_tri / 2, h - d1)); // P1
+ trapezoid_row_normal.points.emplace_back(Point(x + period / 2 + d2_tri / 2, h - d1)); // P2
+ trapezoid_row_normal.points.emplace_back(Point(x + period - d2_tri / 2, d1)); // P3
+ trapezoid_row_normal.points.emplace_back(Point(x + period, d1)); // P4
+ }
+
+ // Shifted row (mirrored vertically)
+ trapezoid_row_shifted.points = trapezoid_row_normal.points;
+ for (auto& p : trapezoid_row_shifted.points)
+ p.y() = h - p.y();
+
+ bool shift_row = false;
+
+ // Generate pattern by copying and translating templates vertically
+ for (coord_t y = y_min_aligned; y < y_max_aligned; y += h) {
+ // Base line - copy and translate
+ Polyline base_line = base_line_template;
+ for (Point& p : base_line.points) {
+ p.y() += y;
+ }
+ polylines.emplace_back(std::move(base_line));
+
+ // Trapezoid line - copy and translate the appropriate template
+ Polyline trapezoid_line = shift_row ? trapezoid_row_shifted : trapezoid_row_normal;
+ for (Point& p : trapezoid_line.points) {
+ p.y() += y;
+ }
+
+ if (!trapezoid_line.points.empty()) {
+ polylines.emplace_back(std::move(trapezoid_line));
+ }
+
+ shift_row = !shift_row;
+ }
+
+ // Rotate around origin (0,0)
+ if (layer_mod)
+ for (auto& pl : polylines)
+ pl.rotate(angle, Point(0,0));
+
+ break;
+ }
+
+ default:
+ // Handle unknown pattern type
+ break;
+ }
+
+ // Apply multiline fill
+ multiline_fill(polylines, params, spacing);
+
+ // Contract surface polygon by half line width to avoid excesive overlap with perimeter
+ ExPolygons contracted = offset_ex(expolygon, -float(scale_(0.5 * this->spacing)));
+
+ // if contraction results in empty polygon, use original surface
+ const ExPolygon &intersection_surface = contracted.empty() ? expolygon : contracted.front();
+
+ // Intersect polylines with offset expolygon
+ polylines = intersection_pl(std::move(polylines), intersection_surface);
+
+ // Remove very short segments that may cause connection issues
+ const double minlength = scale_(0.8 * this->spacing);
+ if (minlength > 0 && !polylines.empty()) {
+ polylines.erase(std::remove_if(polylines.begin(), polylines.end(),
+ [minlength](const Polyline& pl) { return pl.length() < minlength; }),
+ polylines.end());
+ }
+
+ // Connect infill lines using offset expolygon
+ int infill_start_idx = polylines_out.size();
+ if (!polylines.empty()) {
+ Slic3r::Fill::chain_or_connect_infill(std::move(polylines), intersection_surface, polylines_out, this->spacing, params);
+
+ // Rotate back the infill lines to original orientation
+ if (std::abs(base_angle) >= EPSILON) {
+ for (auto it = polylines_out.begin() + infill_start_idx; it != polylines_out.end(); ++it) {
+ it->rotate(base_angle, rotate_vector.second);
+ }
+ }
}
return true;
@@ -3077,15 +3335,27 @@ Polylines FillMonotonicLine::fill_surface(const Surface* surface, const FillPara
Polylines FillGrid::fill_surface(const Surface *surface, const FillParams ¶ms)
{
Polylines polylines_out;
- if (! this->fill_surface_by_multilines(
- surface, params,
- { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
- polylines_out))
- BOOST_LOG_TRIVIAL(error) << "FillGrid::fill_surface() failed to fill a region.";
- if (this->layer_id % 2 == 1)
- for (int i = 0; i < polylines_out.size(); i++)
- std::reverse(polylines_out[i].begin(), polylines_out[i].end());
+ if (params.multiline > 1) {
+ // Experimental trapezoidal grid
+ if (!this->fill_surface_trapezoidal(
+ surface, params,
+ { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
+ polylines_out,0))
+ BOOST_LOG_TRIVIAL(error) << "FillGrid::fill_surface_trapezoidal() failed.";
+
+ } else {
+ if (!this->fill_surface_by_multilines(
+ surface, params,
+ { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
+ polylines_out))
+ BOOST_LOG_TRIVIAL(error) << "FillGrid::fill_surface() failed to fill a region.";
+
+
+ if (this->layer_id % 2 == 1)
+ for (int i = 0; i < polylines_out.size(); i++)
+ std::reverse(polylines_out[i].begin(), polylines_out[i].end());
+ }
return polylines_out;
}
@@ -3108,12 +3378,23 @@ Polylines FillLateralLattice::fill_surface(const Surface *surface, const FillPar
Polylines FillTriangles::fill_surface(const Surface *surface, const FillParams ¶ms){
Polylines polylines_out;
+ if (params.multiline > 1) {
+ // Experimental trapezoidal grid
+ if (!this->fill_surface_trapezoidal(
+ surface, params,
+ { { 0.f, 0.f }, { float(M_PI / 2.), 0.f } },
+ polylines_out,1))
+ BOOST_LOG_TRIVIAL(error) << "FillGrid::fill_surface_trapezoidal() failed.";
+
+ } else {
if (! this->fill_surface_by_multilines(
surface, params,
{ { 0.f, 0.f }, { float(M_PI / 3.), 0.f }, { float(2. * M_PI / 3.), 0. } },
polylines_out))
BOOST_LOG_TRIVIAL(error) << "FillTriangles::fill_surface() failed to fill a region.";
+ }
return polylines_out;
+
}
Polylines FillStars::fill_surface(const Surface *surface, const FillParams ¶ms)
@@ -3144,8 +3425,8 @@ Polylines FillQuarterCubic::fill_surface(const Surface* surface, const FillParam
using namespace boost::math::float_constants;
Polylines polylines_out;
- coord_t line_width = coord_t(scale_(this->spacing));
- coord_t period = coord_t(scale_(this->spacing) / params.density) * 4;
+ coord_t line_width = coord_t(scale_(this->spacing)) * params.multiline;
+ coord_t period = coord_t(scale_(this->spacing) *params.multiline / params.density) * 4;
// First half tetrahedral fill
double pattern_z_shift = 0.0;
diff --git a/src/libslic3r/Fill/FillRectilinear.hpp b/src/libslic3r/Fill/FillRectilinear.hpp
index 3e4f3cf92f..126cbe3a15 100644
--- a/src/libslic3r/Fill/FillRectilinear.hpp
+++ b/src/libslic3r/Fill/FillRectilinear.hpp
@@ -29,6 +29,7 @@ protected:
float pattern_shift;
};
bool fill_surface_by_multilines(const Surface *surface, FillParams params, const std::initializer_list &sweep_params, Polylines &polylines_out);
+ bool fill_surface_trapezoidal(const Surface *surface, FillParams params, const std::initializer_list &sweep_params, Polylines &polylines_out,int Pattern_type);
// The extended bounding box of the whole object that covers any rotation of every layer.
BoundingBox extended_object_bounding_box() const;
diff --git a/src/libslic3r/FlushVolCalc.cpp b/src/libslic3r/FlushVolCalc.cpp
index 675732d767..9bdbc1737d 100644
--- a/src/libslic3r/FlushVolCalc.cpp
+++ b/src/libslic3r/FlushVolCalc.cpp
@@ -10,7 +10,8 @@ namespace Slic3r {
const int g_min_flush_volume_from_support = 700;
const int g_flush_volume_to_support = 230;
-const int g_max_flush_volume = 900;
+const int g_max_flush_volume = 20000; //Orca: increase limit to 20k vs 900 in upstream BBS code.
+ // Retain a clamp to guard against extreme values entered in the UI
static float to_radians(float degree)
{
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index a27208ef1b..2d1940e448 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -2725,8 +2725,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
auto probe_dist_x = std::max(1., m_config.bed_mesh_probe_distance.value.x());
auto probe_dist_y = std::max(1., m_config.bed_mesh_probe_distance.value.y());
- int probe_count_x = std::max(3, (int) std::ceil(mesh_bbox.size().x() / probe_dist_x));
- int probe_count_y = std::max(3, (int) std::ceil(mesh_bbox.size().y() / probe_dist_y));
+ int probe_count_x = std::max(3, (int) std::ceil(mesh_bbox.size().x() / probe_dist_x) + 1);
+ int probe_count_y = std::max(3, (int) std::ceil(mesh_bbox.size().y() / probe_dist_y) + 1);
auto bed_mesh_algo = "bicubic";
if (probe_count_x * probe_count_y <= 6) { // lagrange needs up to a total of 6 mesh points
bed_mesh_algo = "lagrange";
@@ -3082,10 +3082,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
m_sorted_layer_filaments.emplace_back(lt.extruders);
}
- // Orca: finish tracking power lost recovery
+ // Orca: disable power loss recovery if it was enabled earlier
{
- if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == true) {
- file.write(m_writer.enable_power_loss_recovery(false));
+ const auto plr_mode = print.config().enable_power_loss_recovery.value;
+ if (m_second_layer_things_done && plr_mode == PowerLossRecoveryMode::Enable) {
+ file.write(m_writer.enable_power_loss_recovery(PowerLossRecoveryMode::Disable));
}
}
++ finished_objects;
@@ -3163,9 +3164,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
m_sorted_layer_filaments.emplace_back(lt.extruders);
}
- // Orca: finish tracking power lost recovery
- if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == true) {
- file.write(m_writer.enable_power_loss_recovery(false));
+ // Orca: disable power loss recovery
+ if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == PowerLossRecoveryMode::Enable) {
+ file.write(m_writer.enable_power_loss_recovery(PowerLossRecoveryMode::Disable));
}
if (m_wipe_tower)
// Purge the extruder, pull out the active filament.
@@ -4249,8 +4250,8 @@ LayerResult GCode::process_layer(
bool is_multi_extruder = m_config.nozzle_diameter.size() > 1;
bool need_insert_timelapse_gcode_for_traditional = false;
- if (!m_wipe_tower || !m_wipe_tower->enable_timelapse_print()) {
- need_insert_timelapse_gcode_for_traditional = ((is_i3_printer && !m_spiral_vase)|| is_multi_extruder);
+ if ((!m_wipe_tower || !m_wipe_tower->enable_timelapse_print()) && (is_BBL_Printer() || !m_config.time_lapse_gcode.value.empty())) {
+ need_insert_timelapse_gcode_for_traditional = ((is_i3_printer && !m_spiral_vase) || is_multi_extruder);
}
bool has_insert_timelapse_gcode = false;
@@ -4266,19 +4267,18 @@ LayerResult GCode::process_layer(
gcode += this->change_layer(print_z); // this will increase m_layer_index
m_layer = &layer;
m_object_layer_over_raft = false;
- if(is_BBL_Printer()){
- } else {
- if (!m_config.time_lapse_gcode.value.empty()) {
- DynamicConfig config;
- config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
- config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
- config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z));
- gcode += this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(),
- &config) +
- "\n";
- }
+
+ if (!m_config.time_lapse_gcode.value.empty() && !is_BBL_Printer()) {
+ DynamicConfig config;
+ config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
+ config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
+ config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z));
+ gcode += this->placeholder_parser_process("timelapse_gcode",
+ print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config)
+ + "\n";
}
- if (! m_config.layer_change_gcode.value.empty()) {
+
+ if (!m_config.layer_change_gcode.value.empty()) {
DynamicConfig config;
config.set_key_value("most_used_physical_extruder_id", new ConfigOptionInt(m_config.physical_extruder_map.get_at(most_used_extruder)));
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
@@ -4380,10 +4380,9 @@ LayerResult GCode::process_layer(
}
if (!first_layer && !m_second_layer_things_done) {
- // Orca: start tracking power lost recovery
- if (print.config().enable_power_loss_recovery.value == true) {
- gcode += m_writer.enable_power_loss_recovery(true);
- }
+ // Orca: set power loss recovery
+ const auto plr_mode = print.config().enable_power_loss_recovery.value;
+ gcode += m_writer.enable_power_loss_recovery(plr_mode);
if (print.is_BBL_printer()) {
// BBS: open first layer inspection at second layer
@@ -4727,7 +4726,7 @@ LayerResult GCode::process_layer(
auto timelapse_pos=m_timelapse_pos_picker.pick_pos(ctx);
- std::string timepals_gcode;
+ std::string timelapse_gcode;
if (!print.config().time_lapse_gcode.value.empty()) {
DynamicConfig config;
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
@@ -4738,17 +4737,18 @@ LayerResult GCode::process_layer(
config.set_key_value("timelapse_pos_x", new ConfigOptionInt((int)timelapse_pos.x()));
config.set_key_value("timelapse_pos_y", new ConfigOptionInt((int)timelapse_pos.y()));
config.set_key_value("has_timelapse_safe_pos", new ConfigOptionBool(timelapse_pos != DefaultTimelapsePos));
- timepals_gcode = this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config) + "\n";
+ timelapse_gcode = this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config) + "\n";
}
- if (!timepals_gcode.empty()) {
- m_writer.set_current_position_clear(false);
- double temp_z_after_tool_change;
- if (GCodeProcessor::get_last_z_from_gcode(timepals_gcode, temp_z_after_tool_change)) {
- Vec3d pos = m_writer.get_position();
- pos(2) = temp_z_after_tool_change;
- m_writer.set_position(pos);
- }
+ if (!timelapse_gcode.empty()) {
+ m_writer.set_current_position_clear(false);
+
+ double temp_z_after_tool_change;
+ if (GCodeProcessor::get_last_z_from_gcode(timelapse_gcode, temp_z_after_tool_change)) {
+ Vec3d pos = m_writer.get_position();
+ pos(2) = temp_z_after_tool_change;
+ m_writer.set_position(pos);
+ }
}
// (layer_object_label_ids.size() < 64) this restriction comes from _encode_label_ids_to_base64()
@@ -4769,13 +4769,13 @@ LayerResult GCode::process_layer(
std::string end_str = std::string("; object ids of this layer") + std::to_string(m_layer_index + 1) + (" end: ") + oss.str() + "\n";
end_str += "M625\n";
- timepals_gcode = start_str + timepals_gcode + end_str;
+ timelapse_gcode = start_str + timelapse_gcode + end_str;
}
- return timepals_gcode;
+ return timelapse_gcode;
};
- if (!need_insert_timelapse_gcode_for_traditional) { // Equivalent to the timelapse gcode placed in layer_change_gcode
+ if (!need_insert_timelapse_gcode_for_traditional && is_BBL_Printer()) { // Equivalent to the timelapse gcode placed in layer_change_gcode
if (FILAMENT_CONFIG(retract_when_changing_layer)) {
gcode += this->retract(false, false, auto_lift_type, true);
}
@@ -4871,10 +4871,12 @@ LayerResult GCode::process_layer(
gcode_toolchange = this->set_extruder(extruder_id, print_z);
}
+
if (!gcode_toolchange.empty()) {
// Disable vase mode for layers that has toolchange
result.spiral_vase_enable = false;
}
+
gcode += std::move(gcode_toolchange);
// let analyzer tag generator aware of a role type change
@@ -6182,10 +6184,16 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
);
}
- // if still in avoidance mode and under “max”, clamp to “min”
- if (m_resonance_avoidance
- && speed <= m_config.max_resonance_avoidance_speed.value) {
- speed = std::min(speed, m_config.min_resonance_avoidance_speed.value);
+ // if still in avoidance mode and under "max", adjust speed:
+ // - speeds in lower half of range: clamp down to "min"
+ // - speeds in upper half of range: boost up to "max"
+ if (m_resonance_avoidance && speed < m_config.max_resonance_avoidance_speed.value) {
+ if (speed < m_config.min_resonance_avoidance_speed.value +
+ ((m_config.max_resonance_avoidance_speed.value - m_config.min_resonance_avoidance_speed.value) / 2)) {
+ speed = std::min(speed, m_config.min_resonance_avoidance_speed.value);
+ } else {
+ speed = m_config.max_resonance_avoidance_speed.value;
+ }
}
// reset flag for next segment
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 7237779533..b2047bd3aa 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -97,7 +97,8 @@ public:
m_enable_timelapse_print(print_config.timelapse_type.value == TimelapseType::tlSmooth),
m_enable_wrapping_detection(print_config.enable_wrapping_detection && (print_config.wrapping_exclude_area.values.size() > 2) && (slice_used_filaments.size() <= 1)),
m_is_first_print(true),
- m_print_config(&print_config)
+ m_print_config(&print_config),
+ m_last_wipe_tower_print_z(print_config.z_offset.value)
{
// initialize with the extruder offset of master extruder id
m_extruder_offsets.resize(print_config.filament_map.size(), print_config.extruder_offset.get_at(print_config.master_extruder_id.value - 1));
@@ -143,7 +144,7 @@ private:
// Current layer index.
int m_layer_idx;
int m_tool_change_idx;
- double m_last_wipe_tower_print_z = 0.f;
+ double m_last_wipe_tower_print_z;
// BBS
Vec3d m_plate_origin;
diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 25decc4fc2..d772d1d341 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -1893,7 +1893,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
// sanity check
if(m_preheat_steps < 1)
m_preheat_steps = 1;
- m_result.backtrace_enabled = m_preheat_time > 0 && (m_is_XL_printer || (!m_single_extruder_multi_material && filament_count > 1));
+ m_result.backtrace_enabled = config.ooze_prevention && m_preheat_time > 0 && (m_is_XL_printer || (!m_single_extruder_multi_material && filament_count > 1));
assert(config.nozzle_volume.size() == config.nozzle_diameter.size());
m_nozzle_volume.resize(config.nozzle_volume.size());
diff --git a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.cpp b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.cpp
index e472b20794..20377cfe8d 100644
--- a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.cpp
+++ b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.cpp
@@ -15,7 +15,6 @@
#include "../PrintConfig.hpp"
#include "SmallAreaInfillFlowCompensator.hpp"
-#include "spline/spline.h"
#include
namespace Slic3r {
@@ -47,37 +46,43 @@ SmallAreaInfillFlowCompensator::SmallAreaInfillFlowCompensator(const Slic3r::GCo
}
} catch (...) {
std::stringstream ss;
- ss << "Error parsing data point in small area infill compensation model:" << line << std::endl;
+ ss << "Small Area Flow Compensation: Error parsing data point in small area infill compensation model:" << line << std::endl;
throw Slic3r::InvalidArgument(ss.str());
}
}
}
- for (int i = 0; i < eLengths.size(); i++) {
+ for (size_t i = 0; i < eLengths.size(); i++) {
if (i == 0) {
if (!nearly_equal(eLengths[i], 0.0)) {
- throw Slic3r::InvalidArgument("First extrusion length for small area infill compensation model must be 0");
+ throw Slic3r::InvalidArgument("Small Area Flow Compensation: First extrusion length for small area infill compensation model must be 0");
}
} else {
if (nearly_equal(eLengths[i], 0.0)) {
- throw Slic3r::InvalidArgument("Only the first extrusion length for small area infill compensation model can be 0");
+ throw Slic3r::InvalidArgument("Small Area Flow Compensation: Only the first extrusion length for small area infill compensation model can be 0");
}
if (eLengths[i] <= eLengths[i - 1]) {
- throw Slic3r::InvalidArgument("Extrusion lengths for subsequent points must be increasing");
+ throw Slic3r::InvalidArgument("Small Area Flow Compensation: Extrusion lengths for subsequent points must be increasing");
}
}
}
- if (!flowComps.empty() && !nearly_equal(flowComps.back(), 1.0)) {
- throw Slic3r::InvalidArgument("Final compensation factor for small area infill flow compensation model must be 1.0");
+ for (size_t i = 1; i < flowComps.size(); ++i) {
+ if (flowComps[i] <= flowComps[i - 1]) {
+ throw Slic3r::InvalidArgument("Small Area Flow Compensation: Flow compensation factors must strictly increase with extrusion length");
+ }
}
- flowModel = std::make_unique();
- flowModel->set_points(eLengths, flowComps);
+ if (!flowComps.empty() && !nearly_equal(flowComps.back(), 1.0)) {
+ throw Slic3r::InvalidArgument("Small Area Flow Compensation: Final compensation factor for small area infill flow compensation model must be 1.0");
+ }
+
+ flowModel = std::make_unique(eLengths, flowComps);
} catch (std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "Error parsing small area infill compensation model: " << e.what();
+ throw;
}
}
@@ -92,7 +97,7 @@ double SmallAreaInfillFlowCompensator::flow_comp_model(const double line_length)
return 1.0;
}
- return (*flowModel)(line_length);
+ return flowModel->interpolate(line_length);
}
double SmallAreaInfillFlowCompensator::modify_flow(const double line_length, const double dE, const ExtrusionRole role)
diff --git a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp
index 1bfa5149f7..de1df98170 100644
--- a/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp
+++ b/src/libslic3r/GCode/SmallAreaInfillFlowCompensator.hpp
@@ -4,12 +4,9 @@
#include "../libslic3r.h"
#include "../PrintConfig.hpp"
#include "../ExtrusionEntity.hpp"
+#include "PchipInterpolatorHelper.hpp"
#include
-namespace tk {
-class spline;
-} // namespace tk
-
namespace Slic3r {
class SmallAreaInfillFlowCompensator
@@ -26,8 +23,7 @@ private:
std::vector eLengths;
std::vector flowComps;
- // TODO: Cubic Spline
- std::unique_ptr flowModel;
+ std::unique_ptr flowModel;
double flow_comp_model(const double line_length);
diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp
index cf5a68b436..19e98e4a09 100644
--- a/src/libslic3r/GCode/WipeTower2.cpp
+++ b/src/libslic3r/GCode/WipeTower2.cpp
@@ -1215,6 +1215,10 @@ WipeTower::ToolChangeResult WipeTower2::construct_tcr(WipeTowerWriter2& writer,
result.extrusions = std::move(writer.extrusions());
result.wipe_path = std::move(writer.wipe_path());
result.is_finish_first = is_finish;
+ // ORCA: Always initialize the tool_change_start_pos with a valid position
+ // to avoid undefined variable travel on X in Gcode.cpp function std::string WipeTowerIntegration::post_process_wipe_tower_moves
+ result.tool_change_start_pos = result.start_pos; // always valid fallback
+
return result;
}
@@ -2032,7 +2036,11 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer()
// brim (first layer only)
if (first_layer) {
writer.append("; WIPE_TOWER_BRIM_START\n");
- size_t loops_num = (m_wipe_tower_brim_width + spacing/2.f) / spacing;
+ float brim_width = m_wipe_tower_brim_width;
+ if (brim_width < 0.f)
+ brim_width = WipeTower::get_auto_brim_by_height(m_wipe_tower_height);
+
+ size_t loops_num = (brim_width + spacing / 2.f) / spacing;
for (size_t i = 0; i < loops_num; ++ i) {
poly = offset(poly, scale_(spacing)).front();
diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp
index 3dbc066634..6242b634a8 100644
--- a/src/libslic3r/GCode/WipeTower2.hpp
+++ b/src/libslic3r/GCode/WipeTower2.hpp
@@ -58,10 +58,18 @@ public:
std::vector> get_z_and_depth_pairs() const;
float get_brim_width() const { return m_wipe_tower_brim_width_real; }
float get_wipe_tower_height() const { return m_wipe_tower_height; }
-
-
-
-
+ // ORCA: Match WipeTower API used by Print skirt/brim planning.
+ // Returned bounding box is in WIPE-TOWER-LOCAL coordinates (before placement on the bed).
+ // Include brim and y-shift to match what WT gcode actually prints.
+ BoundingBoxf get_bbx() const{
+ const float brim = m_wipe_tower_brim_width_real;
+ const Vec2d min(-brim, -brim + double(m_y_shift));
+ const Vec2d max(double(m_wipe_tower_width) + brim, double(m_wipe_tower_depth) + brim + double(m_y_shift));
+ return BoundingBoxf(min, max);
+ }
+ // WT2 doesn't currently compute a rib-origin compensation like WipeTower (m_rib_offset),
+ // so expose a zero offset for consistency purposes (to maintain API parity).
+ Vec2f get_rib_offset() const { return Vec2f::Zero(); }
// Switch to a next layer.
void set_layer(
diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp
index f3d218750b..1008e5eab1 100644
--- a/src/libslic3r/GCodeWriter.cpp
+++ b/src/libslic3r/GCodeWriter.cpp
@@ -444,23 +444,28 @@ std::string GCodeWriter::reset_e(bool force)
}
}
-std::string GCodeWriter::enable_power_loss_recovery(bool enable)
+std::string GCodeWriter::enable_power_loss_recovery(PowerLossRecoveryMode mode)
{
std::ostringstream gcode;
-
+
+ if (mode == PowerLossRecoveryMode::PrinterConfiguration)
+ return std::string();
+
+ const bool enable = mode == PowerLossRecoveryMode::Enable;
+
if (m_is_bbl_printers) {
- gcode << "; start tracking Power Loss Recovery https://wiki.bambulab.com/en/knowledge-sharing/power-loss-recovery\n";
- gcode << "M1003 S" << (enable ? "1" : "0") << "\n";
+ gcode << "M1003 S" << (enable ? "1" : "0");
}
else if (FLAVOR_IS(gcfMarlinFirmware)) {
- gcode << "; start tracking Power-loss Recovery https://marlinfw.org/docs/gcode/M413.html\n";
- gcode << "M413 S" << (enable ? "1" : "0") << "\n";
+ gcode << "M413 S" << (enable ? "1" : "0");
+ } else {
+ return std::string();
}
-
+ if (GCodeWriter::full_gcode_comment) gcode << " ; set Power-loss Recovery";
+ gcode << "\n";
return gcode.str();
}
-
std::string GCodeWriter::update_progress(unsigned int num, unsigned int tot, bool allow_100) const
{
if (FLAVOR_IS_NOT(gcfMakerWare) && FLAVOR_IS_NOT(gcfSailfish))
diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp
index 32e737164d..dbc64694e2 100644
--- a/src/libslic3r/GCodeWriter.hpp
+++ b/src/libslic3r/GCodeWriter.hpp
@@ -61,7 +61,7 @@ public:
std::string set_input_shaping(char axis, float damp, float freq, std::string type) const;
std::string reset_e(bool force = false);
std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const;
- std::string enable_power_loss_recovery(bool enable);
+ std::string enable_power_loss_recovery(PowerLossRecoveryMode mode);
// return false if this extruder was already selected
bool need_toolchange(unsigned int filament_id) const;
std::string set_extruder(unsigned int filament_id);
diff --git a/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp
index 92e4210f3c..f03a5cee38 100644
--- a/src/libslic3r/PlaceholderParser.cpp
+++ b/src/libslic3r/PlaceholderParser.cpp
@@ -1045,8 +1045,8 @@ namespace client
case coFloatOrPercent:
{
std::string opt_key(opt.it_range.begin(), opt.it_range.end());
- if (boost::ends_with(opt_key, "extrusion_width")) {
- // Extrusion width supports defaults and a complex graph of dependencies.
+ if (boost::ends_with(opt_key, "line_width")) {
+ // Line width supports defaults and a complex graph of dependencies.
output.set_d(Flow::extrusion_width(opt_key, *ctx, static_cast(ctx->current_extruder_id)));
} else if (! static_cast(opt.opt)->percent) {
// Not a percent, just return the value.
@@ -1060,8 +1060,8 @@ namespace client
const ConfigOption *opt_parent = opt_def->ratio_over.empty() ? nullptr : ctx->resolve_symbol(opt_def->ratio_over);
if (opt_parent == nullptr)
ctx->throw_exception("FloatOrPercent variable failed to resolve the \"ratio_over\" dependencies", opt.it_range);
- if (boost::ends_with(opt_def->ratio_over, "extrusion_width")) {
- // Extrusion width supports defaults and a complex graph of dependencies.
+ if (boost::ends_with(opt_def->ratio_over, "line_width")) {
+ // Line width supports defaults and a complex graph of dependencies.
assert(opt_parent->type() == coFloatOrPercent);
v *= Flow::extrusion_width(opt_def->ratio_over, static_cast(opt_parent), *ctx, static_cast(ctx->current_extruder_id));
break;
@@ -2197,9 +2197,8 @@ namespace client
initializer_list(_r1)[px::bind(&MyContext::vector_variable_new_from_initializer_list, _r1, _a, _b, _1)]
// Process it before conditional_expression, as conditional_expression requires a vector reference to be augmented with an index.
// Only process such variable references, which return a naked vector variable.
- // Orca todo: following code cause strange build errors with MSVC C++17
- // | eps(px::bind(&MyContext::could_be_vector_variable_reference, _b)) >>
- // variable_reference(_r1)[px::val(qi::_pass) = px::bind(&MyContext::vector_variable_new_from_copy, _r1, _a, _b, _1)]
+ | eps(px::bind(&MyContext::could_be_vector_variable_reference, _b)) >>
+ variable_reference(_r1)[qi::_pass = px::bind(&MyContext::vector_variable_new_from_copy, _r1, _a, _b, _1)]
// Would NOT consume '(' conditional_expression ')' because such value was consumed with the expression above.
| conditional_expression(_r1)
[px::bind(&MyContext::scalar_variable_new_from_scalar_expression, _r1, _a, _b, _1)]
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 3ca75d28f3..4e78b31b46 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -904,7 +904,7 @@ static std::vector s_Preset_print_options {
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_object_first_layer_gap", "support_interface_speed",
"bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",
"outer_wall_acceleration", "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle", "skirt_height","single_loop_draft_shield", "draft_shield",
- "brim_width", "brim_object_gap", "brim_type", "brim_ears_max_angle", "brim_ears_detection_length", "enable_support", "support_type", "support_threshold_angle", "support_threshold_overlap","enforce_support_layers",
+ "brim_width", "brim_object_gap", "brim_use_efc_outline", "brim_type", "brim_ears_max_angle", "brim_ears_detection_length", "enable_support", "support_type", "support_threshold_angle", "support_threshold_overlap","enforce_support_layers",
"raft_layers", "raft_first_layer_density", "raft_first_layer_expansion", "raft_contact_distance", "raft_expansion",
"support_base_pattern", "support_base_pattern_spacing", "support_expansion", "support_style",
// BBS
diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp
index c123cf53d0..b3efae168f 100644
--- a/src/libslic3r/PresetBundle.cpp
+++ b/src/libslic3r/PresetBundle.cpp
@@ -2751,6 +2751,8 @@ Preset *PresetBundle::get_similar_printer_preset(std::string printer_model, std:
{
if (printer_model.empty())
printer_model = printers.get_selected_preset().config.opt_string("printer_model");
+ if (printer_model.empty()) // ORCA ensure a compatible model exist. fixes switches to blank preset if preset has no inherited value
+ return nullptr;
auto printer_variant_old = printers.get_selected_preset().config.opt_string("printer_variant");
std::map printer_presets;
for (auto &preset : printers.m_presets) {
@@ -2761,7 +2763,8 @@ Preset *PresetBundle::get_similar_printer_preset(std::string printer_model, std:
}
if (printer_presets.empty())
return nullptr;
- auto prefer_printer = printers.get_selected_preset().name;
+ auto prefer_printer = printers.get_selected_preset().alias; //.name ORCA use alias instead "name" for calling system presets. otherwise nozzle combo will not change printer presets if they custom named
+
if (!printer_variant.empty())
boost::replace_all(prefer_printer, printer_variant_old, printer_variant);
else if (auto n = prefer_printer.find(printer_variant_old); n != std::string::npos)
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 330b489141..7a0a6dd867 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -3333,6 +3333,8 @@ void Print::_make_wipe_tower()
m_wipe_tower_data.z_and_depth_pairs = wipe_tower.get_z_and_depth_pairs();
m_wipe_tower_data.brim_width = wipe_tower.get_brim_width();
m_wipe_tower_data.height = wipe_tower.get_wipe_tower_height();
+ m_wipe_tower_data.bbx = wipe_tower.get_bbx();
+ m_wipe_tower_data.rib_offset = wipe_tower.get_rib_offset();
// Unload the current filament over the purge tower.
coordf_t layer_height = m_objects.front()->config().layer_height.value;
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 6287e77ceb..7549eb821d 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -161,6 +161,14 @@ static t_config_enum_values s_keys_map_BedTempFormula {
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BedTempFormula)
+// Orca
+static t_config_enum_values s_keys_map_PowerLossRecoveryMode {
+ { "printer_configuration", int(PowerLossRecoveryMode::PrinterConfiguration) },
+ { "enable", int(PowerLossRecoveryMode::Enable) },
+ { "disable", int(PowerLossRecoveryMode::Disable) }
+};
+CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PowerLossRecoveryMode)
+
static t_config_enum_values s_keys_map_FuzzySkinType {
{ "none", int(FuzzySkinType::None) },
{ "external", int(FuzzySkinType::External) },
@@ -1562,6 +1570,16 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.));
+ def = this->add("brim_use_efc_outline", coBool);
+ def->label = L("Brim follows compensated outline");
+ def->category = L("Support");
+ def->tooltip = L("When enabled, the brim is aligned with the first-layer perimeter geometry after Elephant Foot Compensation is applied.\n"
+ "This option is intended for cases where Elephant Foot Compensation significantly alters the first-layer footprint.\n"
+ "\n"
+ "If your current setup already works well, enabling it may be unnecessary and can cause the brim to fuse with upper layers." );
+ def->mode = comAdvanced;
+ def->set_default_value(new ConfigOptionBool(false));
+
def = this->add("brim_ears", coBool);
def->label = L("Brim ears");
def->category = L("Support");
@@ -2733,7 +2751,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Fill Multiline");
def->tooltip = L("Using multiple lines for the infill pattern, if supported by infill pattern.");
def->min = 1;
- def->max = 5; // Maximum number of lines for infill pattern
+ def->max = 10; // Maximum number of lines for infill pattern
def->set_default_value(new ConfigOptionInt(1));
def = this->add("sparse_infill_pattern", coEnum);
@@ -3366,11 +3384,18 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionBool(false));
// Orca
- def = this->add("enable_power_loss_recovery", coBool);
- def->label = L("Turn on Power Loss Recovery");
- def->tooltip = L("Enable this to insert power loss recovery commands in generated G-code.(Only for Bambu Lab printers and Marlin firmware based printers)");
+ def = this->add("enable_power_loss_recovery", coEnum);
+ def->label = L("Power Loss Recovery");
+ def->tooltip = L("Choose how to control power loss recovery. When set to Printer configuration, the slicer will not emit power loss recovery G-code and will leave the printer's configuration unchanged. Applicable to Bambu Lab or Marlin 2 firmware based printers.");
def->mode = comAdvanced;
- def->set_default_value(new ConfigOptionBool(false));
+ def->enum_keys_map = &ConfigOptionEnum::get_enum_values();
+ def->enum_values.push_back("printer_configuration");
+ def->enum_values.push_back("enable");
+ def->enum_values.push_back("disable");
+ def->enum_labels.push_back(L("Printer configuration"));
+ def->enum_labels.push_back(L("Enable"));
+ def->enum_labels.push_back(L("Disable"));
+ def->set_default_value(new ConfigOptionEnum(PowerLossRecoveryMode::PrinterConfiguration));
//BBS
// def = this->add("spaghetti_detector", coBool);
@@ -7432,6 +7457,13 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
else if (opt_key == "extruder_type") {
ReplaceString(value, "DirectDrive", "Direct Drive");
}
+ else if (opt_key == "enable_power_loss_recovery") {
+ if (value == "1" || boost::iequals(value, "true")) {
+ value = "enable";
+ } else if (value == "0" || boost::iequals(value, "false")) {
+ value = "disable";
+ }
+ }
else if(opt_key == "ensure_vertical_shell_thickness") {
if(value == "1") {
value = "ensure_all";
@@ -7646,6 +7678,9 @@ std::set filament_options_with_variant = {
"filament_retraction_length",
"filament_z_hop",
"filament_z_hop_types",
+ "filament_retract_lift_above",
+ "filament_retract_lift_below",
+ "filament_retract_lift_enforce",
"filament_retract_restart_extra",
"filament_retraction_speed",
"filament_deretraction_speed",
@@ -7664,7 +7699,11 @@ std::set filament_options_with_variant = {
"filament_flush_volumetric_speed",
"filament_flush_temp",
"volumetric_speed_coefficients",
- "filament_adaptive_volumetric_speed"
+ "filament_adaptive_volumetric_speed",
+ "filament_ironing_flow",
+ "filament_ironing_spacing",
+ "filament_ironing_inset",
+ "filament_ironing_speed"
};
// Parameters that are the same as the number of extruders
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 3e34a8362b..998764f292 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -102,6 +102,13 @@ enum class BedTempFormula {
count,
};
+// Orca
+enum class PowerLossRecoveryMode {
+ PrinterConfiguration,
+ Enable,
+ Disable,
+};
+
// BBS
enum class WallSequence {
InnerOuter,
@@ -507,6 +514,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrintHostType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(AuthorizationType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerWallType)
CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PerimeterGeneratorType)
+CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PowerLossRecoveryMode)
#undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS
@@ -874,6 +882,7 @@ PRINT_CONFIG_CLASS_DEFINE(
PrintObjectConfig,
((ConfigOptionFloat, brim_object_gap))
+ ((ConfigOptionBool, brim_use_efc_outline))
((ConfigOptionEnum, brim_type))
((ConfigOptionFloat, brim_width))
((ConfigOptionFloat, brim_ears_detection_length))
@@ -1271,7 +1280,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionIntsNullable, filament_flush_temp))
// BBS
((ConfigOptionBool, scan_first_layer))
- ((ConfigOptionBool, enable_power_loss_recovery))
+ ((ConfigOptionEnum, enable_power_loss_recovery))
((ConfigOptionBool, enable_wrapping_detection))
((ConfigOptionInt, wrapping_detection_layers))
((ConfigOptionPoints, wrapping_exclude_area))
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index 7cc98209cf..4b4237dca1 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -1006,6 +1006,7 @@ bool PrintObject::invalidate_state_by_config_options(
for (const t_config_option_key &opt_key : opt_keys) {
if ( opt_key == "brim_width"
|| opt_key == "brim_object_gap"
+ || opt_key == "brim_use_efc_outline"
|| opt_key == "brim_type"
|| opt_key == "brim_ears_max_angle"
|| opt_key == "brim_ears_detection_length"
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 20629c7496..051b5e5519 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -458,6 +458,8 @@ set(SLIC3R_GUI_SOURCES
GUI/UnsavedChangesDialog.hpp
GUI/UpdateDialogs.cpp
GUI/UpdateDialogs.hpp
+ GUI/NetworkPluginDialog.cpp
+ GUI/NetworkPluginDialog.hpp
GUI/UpgradePanel.cpp
GUI/UpgradePanel.hpp
GUI/UserManager.cpp
@@ -494,6 +496,8 @@ set(SLIC3R_GUI_SOURCES
GUI/Widgets/ErrorMsgStaticText.hpp
GUI/Widgets/FanControl.cpp
GUI/Widgets/FanControl.hpp
+ GUI/Widgets/HyperLink.cpp
+ GUI/Widgets/HyperLink.hpp
GUI/Widgets/ImageSwitchButton.cpp
GUI/Widgets/ImageSwitchButton.hpp
GUI/Widgets/Label.cpp
@@ -705,8 +709,16 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES})
encoding_check(libslic3r_gui)
+
+if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ set(_opengl_link_lib "")
+else()
+ set(_opengl_link_lib OpenGL::GL)
+endif()
+
target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo libvgcode GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto noise::noise)
+
if (MSVC)
target_link_libraries(libslic3r_gui Setupapi.lib)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
@@ -723,7 +735,11 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
${CURL_LIBRARIES}
)
elseif (APPLE)
- target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} "-framework Security")
+ if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0")
+ target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} "-framework Security" "-framework OpenGL")
+ else()
+ target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} "-framework Security")
+ endif()
endif()
if (SLIC3R_STATIC)
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp
index a649f6b833..19a32c2d21 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.cpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp
@@ -298,11 +298,7 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent)
if (language.find("zh") == 0)
region = "zh";
wxString link_url = wxString::Format("https://wiki.bambulab.com/%s/software/bambu-studio/calibration_pa", region);
- m_wiki_ctrl = new wxHyperlinkCtrl(parent, wxID_ANY, "Wiki", link_url);
- m_wiki_ctrl->SetNormalColour(*wxBLUE);
- m_wiki_ctrl->SetHoverColour(wxColour(0, 0, 200));
- m_wiki_ctrl->SetVisitedColour(*wxBLUE);
- m_wiki_ctrl->SetFont(Label::Head_14);
+ m_wiki_ctrl = new HyperLink(parent, "Wiki Guide", link_url);
cali_title_sizer->Add(m_ratio_text, 0, wxALIGN_CENTER_VERTICAL);
cali_title_sizer->Add(m_wiki_ctrl, 0, wxALIGN_CENTER_VERTICAL);
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp
index c678ec0717..84688896e6 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.hpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp
@@ -14,8 +14,8 @@
#include "Widgets/CheckBox.hpp"
#include "Widgets/ComboBox.hpp"
#include "Widgets/TextInput.hpp"
+#include "Widgets/HyperLink.hpp"
#include "slic3r/Utils/CalibUtils.hpp"
-#include
#define AMS_MATERIALS_SETTING_DEF_COLOUR wxColour(255, 255, 255)
#define AMS_MATERIALS_SETTING_GREY900 wxColour(38, 46, 48)
@@ -174,7 +174,7 @@ protected:
wxPanel * m_panel_kn;
wxStaticText* m_ratio_text;
- wxHyperlinkCtrl * m_wiki_ctrl;
+ HyperLink * m_wiki_ctrl;
wxStaticText* m_k_param;
TextInput* m_input_k_val;
wxStaticText* m_n_param;
diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp
index 7610fbe820..3847f8f2f1 100644
--- a/src/slic3r/GUI/BindDialog.cpp
+++ b/src/slic3r/GUI/BindDialog.cpp
@@ -98,18 +98,8 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
m_status_text->Wrap(FromDIP(440));
m_status_text->SetForegroundColour(wxColour(38, 46, 48));
- m_link_show_ping_code_wiki = new wxStaticText(request_bind_panel, wxID_ANY, _L("Can't find Pin Code?"));
- m_link_show_ping_code_wiki->SetFont(Label::Body_14);
- m_link_show_ping_code_wiki->SetBackgroundColour(*wxWHITE);
- m_link_show_ping_code_wiki->SetForegroundColour(wxColour(31, 142, 234));
-
- m_link_show_ping_code_wiki->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
- m_link_show_ping_code_wiki->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
-
- m_link_show_ping_code_wiki->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
- m_ping_code_wiki = "https://wiki.bambulab.com/en/bambu-studio/manual/pin-code";
- wxLaunchDefaultBrowser(m_ping_code_wiki);
- });
+ // ORCA standardized HyperLink
+ m_link_show_ping_code_wiki = new HyperLink(request_bind_panel, _L("Can't find Pin Code?"), "https://wiki.bambulab.com/en/bambu-studio/manual/pin-code");
m_text_input_title = new wxStaticText(request_bind_panel, wxID_ANY, _L("Pin Code"));
m_text_input_title->SetFont(Label::Body_14);
@@ -453,11 +443,11 @@ PingCodeBindDialog::~PingCodeBindDialog() {
m_st_privacy_title->SetFont(Label::Body_13);
m_st_privacy_title->SetForegroundColour(wxColour(38, 46, 48));
- auto m_link_Terms_title = new Label(m_panel_agreement, _L("Terms and Conditions"));
+ // ORCA standardized HyperLink
+ auto m_link_Terms_title = new HyperLink(m_panel_agreement, _L("Terms and Conditions"));
m_link_Terms_title->SetFont(Label::Head_13);
m_link_Terms_title->SetMaxSize(wxSize(FromDIP(450), -1));
m_link_Terms_title->Wrap(FromDIP(450));
- m_link_Terms_title->SetForegroundColour(wxColour("#009688"));
m_link_Terms_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
wxString txt = _L("Thank you for purchasing a Bambu Lab device. Before using your Bambu Lab device, please read the terms and conditions. "
"By clicking to agree to use your Bambu Lab device, you agree to abide by the Privacy Policy and Terms of Use (collectively, the \"Terms\"). "
@@ -467,18 +457,16 @@ PingCodeBindDialog::~PingCodeBindDialog() {
confirm_dlg.CenterOnParent();
confirm_dlg.on_show();
});
- m_link_Terms_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
- m_link_Terms_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
auto m_st_and_title = new Label(m_panel_agreement, _L("and"));
m_st_and_title->SetFont(Label::Body_13);
m_st_and_title->SetForegroundColour(wxColour(38, 46, 48));
- auto m_link_privacy_title = new Label(m_panel_agreement, _L("Privacy Policy"));
+ // ORCA standardized HyperLink
+ auto m_link_privacy_title = new HyperLink(m_panel_agreement, _L("Privacy Policy"));
m_link_privacy_title->SetFont(Label::Head_13);
m_link_privacy_title->SetMaxSize(wxSize(FromDIP(450), -1));
m_link_privacy_title->Wrap(FromDIP(450));
- m_link_privacy_title->SetForegroundColour(wxColour("#009688"));
m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
std::string url;
std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code();
@@ -491,8 +479,6 @@ PingCodeBindDialog::~PingCodeBindDialog() {
}
wxLaunchDefaultBrowser(url);
});
- m_link_privacy_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND);});
- m_link_privacy_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW);});
sizere_notice_agreement->Add(0, 0, 0, wxTOP, FromDIP(4));
sizer_privacy_agreement->Add(m_st_privacy_title, 0, wxALIGN_CENTER, 0);
@@ -514,13 +500,11 @@ PingCodeBindDialog::~PingCodeBindDialog() {
m_st_notice_title->SetFont(Label::Body_13);
m_st_notice_title->SetForegroundColour(wxColour(38, 46, 48));
- auto m_link_notice_title = new Label(m_panel_agreement, notice_link_title);
+ // ORCA standardized HyperLink
+ auto m_link_notice_title = new HyperLink(m_panel_agreement, notice_link_title);
m_link_notice_title->SetFont(Label::Head_13);
m_link_notice_title->SetMaxSize(wxSize(FromDIP(450), -1));
m_link_notice_title->Wrap(FromDIP(450));
- m_link_notice_title->SetForegroundColour(wxColour("#009688"));
- m_link_notice_title->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
- m_link_notice_title->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
m_link_notice_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {
wxString txt = _L("In the 3D Printing community, we learn from each other's successes and failures to adjust "
"our own slicing parameters and settings. %s follows the same principle and uses machine "
@@ -580,13 +564,8 @@ PingCodeBindDialog::~PingCodeBindDialog() {
wxBoxSizer* m_sizer_bind_failed_info = new wxBoxSizer(wxVERTICAL);
m_sw_bind_failed_info->SetSizer( m_sizer_bind_failed_info );
- m_link_network_state = new wxHyperlinkCtrl(m_sw_bind_failed_info, wxID_ANY,_L("Check the status of current system services"),"");
- m_link_network_state->SetFont(::Label::Body_12);
- m_link_network_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {wxGetApp().link_to_network_check(); });
- m_link_network_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_HAND); });
- m_link_network_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {m_link_network_state->SetCursor(wxCURSOR_ARROW); });
-
-
+ // ORCA standardized HyperLink
+ m_link_network_state = new HyperLink(m_sw_bind_failed_info, _L("Check the status of current system services"), wxGetApp().link_to_network_check());
wxBoxSizer* sizer_error_code = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL);
diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp
index a4ffd8fbff..b809bc523b 100644
--- a/src/slic3r/GUI/BindDialog.hpp
+++ b/src/slic3r/GUI/BindDialog.hpp
@@ -17,13 +17,13 @@
#include
#include
#include
-#include
#include "wxExtensions.hpp"
#include "Widgets/StepCtrl.hpp"
#include "Widgets/ProgressDialog.hpp"
#include "Widgets/Button.hpp"
#include "Widgets/ProgressBar.hpp"
#include "Widgets/RoundedRectangle.hpp"
+#include "Widgets/HyperLink.hpp"
#include "Jobs/BindJob.hpp"
#include "BBLStatusBar.hpp"
#include "BBLStatusBarBind.hpp"
@@ -56,7 +56,7 @@ private:
Label* m_status_text;
wxStaticText* m_text_input_title;
- wxStaticText* m_link_show_ping_code_wiki;
+ HyperLink* m_link_show_ping_code_wiki; // ORCA
TextInput* m_text_input_single_code[PING_CODE_LENGTH];
Button* m_button_bind;
Button* m_button_cancel;
@@ -70,7 +70,7 @@ private:
Label* m_st_txt_error_code{ nullptr };
Label* m_st_txt_error_desc{ nullptr };
Label* m_st_txt_extra_info{ nullptr };
- wxHyperlinkCtrl* m_link_network_state{ nullptr };
+ HyperLink* m_link_network_state{ nullptr };
wxString m_result_info;
wxString m_result_extra;
wxString m_ping_code_wiki;
@@ -114,7 +114,7 @@ private:
Label* m_st_txt_error_code{ nullptr };
Label* m_st_txt_error_desc{ nullptr };
Label* m_st_txt_extra_info{ nullptr };
- wxHyperlinkCtrl* m_link_network_state{ nullptr };
+ HyperLink* m_link_network_state{ nullptr };
wxString m_result_info;
wxString m_result_extra;
bool m_show_error_info_state = true;
diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp
index 055cbe905d..12162615aa 100644
--- a/src/slic3r/GUI/CalibrationPanel.cpp
+++ b/src/slic3r/GUI/CalibrationPanel.cpp
@@ -269,7 +269,7 @@ void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus))
}
}
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxTimerEvent(*m_refresh_timer));
PopupWindow::Popup();
}
@@ -505,7 +505,7 @@ void CalibrationPanel::init_timer()
m_refresh_timer = new wxTimer();
m_refresh_timer->SetOwner(this);
m_refresh_timer->Start(REFRESH_INTERVAL);
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxCommandEvent(wxEVT_TIMER));
}
void CalibrationPanel::on_timer(wxTimerEvent& event) {
@@ -634,7 +634,7 @@ bool CalibrationPanel::Show(bool show) {
m_refresh_timer->Stop();
m_refresh_timer->SetOwner(this);
m_refresh_timer->Start(REFRESH_INTERVAL);
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxCommandEvent(wxEVT_TIMER));
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (dev) {
diff --git a/src/slic3r/GUI/CalibrationWizardPage.cpp b/src/slic3r/GUI/CalibrationWizardPage.cpp
index 3da543e79d..13e7023190 100644
--- a/src/slic3r/GUI/CalibrationWizardPage.cpp
+++ b/src/slic3r/GUI/CalibrationWizardPage.cpp
@@ -466,21 +466,12 @@ void CaliPageCaption::init_bitmaps() {
void CaliPageCaption::create_wiki(wxWindow* parent)
{
- m_wiki_text = new Label(parent, _L("Wiki"));
- m_wiki_text->SetFont(Label::Head_14);
- m_wiki_text->SetForegroundColour({ 0, 88, 220 });
- m_wiki_text->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) {
- e.Skip();
- SetCursor(wxCURSOR_HAND);
- });
- m_wiki_text->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) {
- e.Skip();
- SetCursor(wxCURSOR_ARROW);
- });
+ // ORCA standardized HyperLink
+ m_wiki_text = new HyperLink(parent, _L("Wiki Guide"));
m_wiki_text->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) {
if (!m_wiki_url.empty())
wxLaunchDefaultBrowser(m_wiki_url);
- });
+ });
}
void CaliPageCaption::show_prev_btn(bool show)
diff --git a/src/slic3r/GUI/CalibrationWizardPage.hpp b/src/slic3r/GUI/CalibrationWizardPage.hpp
index d03979cd55..524b1a6029 100644
--- a/src/slic3r/GUI/CalibrationWizardPage.hpp
+++ b/src/slic3r/GUI/CalibrationWizardPage.hpp
@@ -7,6 +7,7 @@
#include "Widgets/TextInput.hpp"
#include "Widgets/AMSControl.hpp"
#include "Widgets/ProgressBar.hpp"
+#include "Widgets/HyperLink.hpp"
#include "wxExtensions.hpp"
#include "PresetComboBoxes.hpp"
@@ -140,7 +141,7 @@ private:
void init_bitmaps();
void create_wiki(wxWindow* parent);
- Label* m_wiki_text;
+ HyperLink* m_wiki_text; // ORCA
wxString m_wiki_url;
ScalableBitmap m_prev_bmp_normal;
ScalableBitmap m_prev_bmp_hover;
diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp
index 60828cedcf..90944e673e 100644
--- a/src/slic3r/GUI/ConfigManipulation.cpp
+++ b/src/slic3r/GUI/ConfigManipulation.cpp
@@ -604,8 +604,8 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
// Infill patterns that support multiline infill.
InfillPattern pattern = config->opt_enum("sparse_infill_pattern");
- bool have_multiline_infill_pattern = pattern == ipGyroid || pattern == ipGrid || pattern == ipRectilinear || pattern == ipTpmsD || pattern == ipTpmsFK || pattern == ipCrossHatch || pattern == ipHoneycomb || pattern == ipLateralLattice || pattern == ipLateralHoneycomb ||
- pattern == ipCubic || pattern == ipStars || pattern == ipAlignedRectilinear || pattern == ipLightning || pattern == ip3DHoneycomb || pattern == ipAdaptiveCubic || pattern == ipSupportCubic;
+ bool have_multiline_infill_pattern = pattern == ipGyroid || pattern == ipGrid || pattern == ipRectilinear || pattern == ipTpmsD || pattern == ipTpmsFK || pattern == ipCrossHatch || pattern == ipHoneycomb || pattern == ipLateralLattice || pattern == ipLateralHoneycomb || pattern == ipConcentric ||
+ pattern == ipCubic || pattern == ipStars || pattern == ipAlignedRectilinear || pattern == ipLightning || pattern == ip3DHoneycomb || pattern == ipAdaptiveCubic || pattern == ipSupportCubic|| pattern == ipTriangles || pattern == ipQuarterCubic|| pattern == ipArchimedeanChords || pattern == ipHilbertCurve || pattern == ipOctagramSpiral;
// If there is infill, enable/disable fill_multiline according to whether the pattern supports multiline infill.
if (have_infill) {
@@ -705,6 +705,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
bool have_brim = (config->opt_enum("brim_type") != btNoBrim);
toggle_field("brim_object_gap", have_brim);
+ toggle_field("brim_use_efc_outline", have_brim);
bool have_brim_width = (config->opt_enum("brim_type") != btNoBrim) && config->opt_enum("brim_type") != btAutoBrim &&
config->opt_enum("brim_type") != btPainted;
toggle_field("brim_width", have_brim_width);
@@ -774,10 +775,11 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
// Orca: Force solid support interface when using support ironing
toggle_field("support_interface_spacing", have_support_material && have_support_interface && !has_support_ironing);
- bool have_skirt_height = have_skirt &&
- (config->opt_int("skirt_height") > 1 || config->opt_enum("draft_shield") != dsEnabled);
- toggle_line("support_speed", have_support_material || have_skirt_height);
- toggle_line("support_interface_speed", have_support_material && have_support_interface);
+// see issue #10915
+// bool have_skirt_height = have_skirt &&
+// (config->opt_int("skirt_height") > 1 || config->opt_enum("draft_shield") != dsEnabled);
+// toggle_line("support_speed", have_support_material || have_skirt_height);
+// toggle_line("support_interface_speed", have_support_material && have_support_interface);
// BBS
//toggle_field("support_material_synchronize_layers", have_support_soluble);
@@ -934,12 +936,15 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
bool lattice_options = config->opt_enum("sparse_infill_pattern") == InfillPattern::ipLateralLattice;
for (auto el : { "lateral_lattice_angle_1", "lateral_lattice_angle_2"})
toggle_line(el, lattice_options);
+
+ // Adaptative Cubic and support cubic infill patterns do not support infill rotation.
+ bool FillAdaptive = (pattern == InfillPattern::ipAdaptiveCubic || pattern == InfillPattern::ipSupportCubic);
- //Orca: disable infill_direction/solid_infill_direction if sparse_infill_rotate_template/solid_infill_rotate_template is not empty value
- toggle_field("infill_direction", config->opt_string("sparse_infill_rotate_template") == "");
+ //Orca: disable infill_direction/solid_infill_direction if sparse_infill_rotate_template/solid_infill_rotate_template is not empty value and adaptive cubic/support cubic infill pattern is not selected
+ toggle_field("sparse_infill_rotate_template", !FillAdaptive);
+ toggle_field("infill_direction", config->opt_string("sparse_infill_rotate_template") == "" && !FillAdaptive);
toggle_field("solid_infill_direction", config->opt_string("solid_infill_rotate_template") == "");
-
-
+
toggle_line("infill_overhang_angle", config->opt_enum("sparse_infill_pattern") == InfillPattern::ipLateralHoneycomb);
std::string printer_type = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle);
diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp
index 7eb3beda82..269cd6ed12 100644
--- a/src/slic3r/GUI/CreatePresetsDialog.cpp
+++ b/src/slic3r/GUI/CreatePresetsDialog.cpp
@@ -17,6 +17,7 @@
#include "Tab.hpp"
#include "MainFrame.hpp"
#include "libslic3r_version.h"
+#include "Widgets/HyperLink.hpp" // ORCA
#define NAME_OPTION_COMBOBOX_SIZE wxSize(FromDIP(200), FromDIP(24))
#define FILAMENT_PRESET_COMBOBOX_SIZE wxSize(FromDIP(300), FromDIP(24))
@@ -5027,8 +5028,8 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre
bool base_id_error = false;
if (preset->inherits() == "" && preset->base_id != "") base_id_error = true;
if (base_id_error) {
- std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/custom-filament-issue";
- wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(panel, wxID_ANY, _L("[Delete Required]"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
+ // ORCA standardized HyperLink
+ HyperLink *m_download_hyperlink = new HyperLink(panel, _L("[Delete Required]"), "https://wiki.bambulab.com/en/software/bambu-studio/custom-filament-issue");
m_download_hyperlink->SetFont(Label::Body_10);
sizer->Add(m_download_hyperlink, 0, wxEXPAND | wxALL, 5);
}
diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp
index d19f1aa0dd..5c32f42c2b 100644
--- a/src/slic3r/GUI/DeviceCore/DevManager.cpp
+++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp
@@ -90,6 +90,25 @@ namespace Slic3r
userMachineList.clear();
}
+ void DeviceManager::set_agent(NetworkAgent* agent)
+ {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": updating agent for "
+ << localMachineList.size() << " local and "
+ << userMachineList.size() << " user machines";
+ m_agent = agent;
+
+ std::lock_guard lock(listMutex);
+ for (auto& it : localMachineList) {
+ if (it.second) {
+ it.second->set_agent(agent);
+ }
+ }
+ for (auto& it : userMachineList) {
+ if (it.second) {
+ it.second->set_agent(agent);
+ }
+ }
+ }
void DeviceManager::EnableMultiMachine(bool enable)
{
diff --git a/src/slic3r/GUI/DeviceCore/DevManager.h b/src/slic3r/GUI/DeviceCore/DevManager.h
index fbc30c0050..5ecb77401d 100644
--- a/src/slic3r/GUI/DeviceCore/DevManager.h
+++ b/src/slic3r/GUI/DeviceCore/DevManager.h
@@ -40,7 +40,7 @@ public:
public:
NetworkAgent* get_agent() const { return m_agent; }
- void set_agent(NetworkAgent* agent) { m_agent = agent; }
+ void set_agent(NetworkAgent* agent);
void start_refresher();
void stop_refresher();
diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp
index 112b514ab3..f4362cc3f7 100644
--- a/src/slic3r/GUI/DeviceManager.hpp
+++ b/src/slic3r/GUI/DeviceManager.hpp
@@ -135,6 +135,8 @@ public:
MachineObject(DeviceManager* manager, NetworkAgent* agent, std::string name, std::string id, std::string ip);
~MachineObject();
+ void set_agent(NetworkAgent* agent) { m_agent = agent; }
+
public:
enum ActiveState {
NotActive,
diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp
index 1c4f7a9bfb..7ded82037e 100644
--- a/src/slic3r/GUI/DownloadProgressDialog.cpp
+++ b/src/slic3r/GUI/DownloadProgressDialog.cpp
@@ -19,10 +19,13 @@
//#include "ConfigWizard.hpp"
#include "wxExtensions.hpp"
#include "slic3r/GUI/MainFrame.hpp"
+#include "slic3r/GUI/MsgDialog.hpp"
#include "GUI_App.hpp"
#include "Jobs/BoostThreadWorker.hpp"
#include "Jobs/PlaterWorker.hpp"
+#include "Widgets/HyperLink.hpp" // ORCA
+
#define DESIGN_INPUT_SIZE wxSize(FromDIP(100), -1)
namespace Slic3r {
@@ -72,7 +75,8 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title)
sizer_download_failed->Add(m_statictext_download_failed, 0, wxALIGN_CENTER | wxALL, 5);
- auto m_download_hyperlink = new wxHyperlinkCtrl(m_panel_download_failed, wxID_ANY, _L("click here to see more info"), download_failed_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
+ // ORCA standardized HyperLink
+ auto m_download_hyperlink = new HyperLink(m_panel_download_failed, _L("click here to see more info"), download_failed_url);
sizer_download_failed->Add(m_download_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
@@ -93,7 +97,8 @@ DownloadProgressDialog::DownloadProgressDialog(wxString title)
sizer_install_failed->Add(m_statictext_install_failed, 0, wxALIGN_CENTER | wxALL, 5);
- auto m_install_hyperlink = new wxHyperlinkCtrl(m_panel_install_failed, wxID_ANY, _L("click here to see more info"), install_failed_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
+ // ORCA standardized HyperLink
+ auto m_install_hyperlink = new HyperLink(m_panel_install_failed, _L("click here to see more info"), install_failed_url);
sizer_install_failed->Add(m_install_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
@@ -203,6 +208,16 @@ void DownloadProgressDialog::update_release_note(std::string release_note, std::
std::unique_ptr DownloadProgressDialog::make_job() { return std::make_unique(); }
-void DownloadProgressDialog::on_finish() { wxGetApp().restart_networking(); }
+void DownloadProgressDialog::on_finish()
+{
+ if (wxGetApp().hot_reload_network_plugin()) {
+ return;
+ }
+
+ MessageDialog dlg(nullptr,
+ _L("The network plugin was installed but could not be loaded. Please restart the application."),
+ _L("Restart Required"), wxOK | wxICON_INFORMATION);
+ dlg.ShowModal();
+}
}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/FilamentGroupPopup.cpp b/src/slic3r/GUI/FilamentGroupPopup.cpp
index 89c9dbd8de..df78e69a80 100644
--- a/src/slic3r/GUI/FilamentGroupPopup.cpp
+++ b/src/slic3r/GUI/FilamentGroupPopup.cpp
@@ -147,15 +147,10 @@ FilamentGroupPopup::FilamentGroupPopup(wxWindow *parent) : PopupWindow(parent, w
{
wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL);
- const std::string wiki_path = Slic3r::resources_dir() + "/wiki/filament_group_wiki_zh.html";
+ const std::string wiki_path = Slic3r::resources_dir() + "/wiki/filament_group_wiki_zh.html"; // NEEDFIX this link is broken
auto* wiki_sizer = new wxBoxSizer(wxHORIZONTAL);
- wiki_link = new wxStaticText(this, wxID_ANY, _L("Learn more"));
- wiki_link->SetBackgroundColour(BackGroundColor);
- wiki_link->SetForegroundColour(GreenColor);
- wiki_link->SetFont(Label::Body_12.Underlined());
- wiki_link->SetCursor(wxCursor(wxCURSOR_HAND));
- wiki_link->Bind(wxEVT_LEFT_DOWN, [wiki_path](wxMouseEvent &) { wxLaunchDefaultBrowser(wxString(wiki_path.c_str())); });
+ wiki_link = new HyperLink(this, _L("Wiki Guide"), wxString(wiki_path.c_str())); // ORCA
wiki_sizer->Add(wiki_link, 0, wxALIGN_CENTER | wxALL, FromDIP(3));
button_sizer->Add(wiki_sizer, 0, wxLEFT, horizontal_margin);
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index 34babf8e66..aa31e0b4f3 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -804,17 +804,13 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle)
msg_dlg.ShowModal();
}
- if (preset_bundle)
- m_nozzle_nums = preset_bundle->get_printer_extruder_count();
-
- // set to color print by default if use multi extruders
- if (m_nozzle_nums > 1) {
- m_view_type_sel = std::distance(view_type_items.begin(),std::find(view_type_items.begin(), view_type_items.end(), libvgcode::EViewType::Summary));
- set_view_type(libvgcode::EViewType::Summary);
- } else {
- m_view_type_sel = std::distance(view_type_items.begin(),std::find(view_type_items.begin(), view_type_items.end(), libvgcode::EViewType::ColorPrint));
- set_view_type(libvgcode::EViewType::ColorPrint);
- }
+ // Orca:
+ // Default view type at first slice.
+ // May be overridden in load() once we know how many tools are actually used in the G-code.
+ m_nozzle_nums = preset_bundle ? preset_bundle->get_printer_extruder_count() : 1;
+ auto it = std::find(view_type_items.begin(), view_type_items.end(), EViewType::FeatureType);
+ m_view_type_sel = (it != view_type_items.end()) ? std::distance(view_type_items.begin(), it) : 0;
+ set_view_type(EViewType::FeatureType);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": finished");
}
@@ -1087,6 +1083,22 @@ void GCodeViewer::load_as_gcode(const GCodeProcessorResult& gcode_result, const
m_max_print_height = gcode_result.printable_height;
m_z_offset = gcode_result.z_offset;
+ load_toolpaths(gcode_result, build_volume, exclude_bounding_box);
+
+ // ORCA: Only show filament/color print preview if more than one tool/extruder is actually used in the toolpaths.
+ // Only reset back to Toolpaths (FeatureType) if we are currently in ColorPrint and this load is single-tool.
+ if (m_extruder_ids.size() > 1) {
+ auto it = std::find(view_type_items.begin(), view_type_items.end(), EViewType::ColorPrint);
+ if (it != view_type_items.end())
+ m_view_type_sel = std::distance(view_type_items.begin(), it);
+ set_view_type(EViewType::ColorPrint);
+ } else if (m_view_type == EViewType::ColorPrint) {
+ auto it = std::find(view_type_items.begin(), view_type_items.end(), EViewType::FeatureType);
+ if (it != view_type_items.end())
+ m_view_type_sel = std::distance(view_type_items.begin(), it);
+ set_view_type(EViewType::FeatureType);
+ }
+
// BBS: data for rendering color arrangement recommendation
m_nozzle_nums = print.config().option("nozzle_diameter")->values.size();
// Orca hack: Hide filament group for non-bbl printers
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 0c14826057..fe9b60ea93 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -5879,6 +5879,7 @@ static const float cameraProjection[16] = {1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.
void GLCanvas3D::_render_3d_navigator()
{
if (!wxGetApp().show_3d_navigator()) {
+ m_canvas_toolbar_pos[0] = 0;
return;
}
@@ -5925,7 +5926,7 @@ void GLCanvas3D::_render_3d_navigator()
}
const float size = 128 * sc;
- m_axis_button_pos[0] = size - 10;
+ m_canvas_toolbar_pos[0] = size;
const auto result = ImGuizmo::ViewManipulate(cameraView, cameraProjection, ImGuizmo::OPERATION::ROTATE, ImGuizmo::MODE::WORLD, nullptr,
camDistance, ImVec2(viewManipulateLeft, viewManipulateTop - size), ImVec2(size, size),
0x00101010);
@@ -5961,7 +5962,6 @@ void GLCanvas3D::_render_3d_navigator()
request_extra_frame();
}
- _render_camera_toolbar();
}
#define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
@@ -7815,6 +7815,8 @@ void GLCanvas3D::_render_overlays()
m_labels.render(sorted_instances);
_render_3d_navigator();
+
+ _render_canvas_toolbar();
}
void GLCanvas3D::_render_style_editor()
@@ -8453,47 +8455,169 @@ void GLCanvas3D::_render_return_toolbar() const
imgui.end();
}
-void GLCanvas3D::_render_camera_toolbar()
+void GLCanvas3D::_render_canvas_toolbar()
{
- float font_size = ImGui::GetFontSize();
- float sc = get_scale();
- ImVec2 button_icon_size = ImVec2(font_size * 2.5, font_size * 2.5);
+ ImGuiWrapper &imgui = *wxGetApp().imgui();
+ float sc = get_scale();
- ImGuiWrapper &imgui = *wxGetApp().imgui();
- float window_width = button_icon_size.x + imgui.scaled(2.0f);
- float window_height = button_icon_size.y + imgui.scaled(2.0f);
+ #ifdef WIN32
+ const int dpi = get_dpi_for_window(wxGetApp().GetTopWindow());
+ sc *= (float) dpi / (float) DPI_DEFAULT;
+ #endif // WIN32
- Size cnv_size = get_canvas_size();
- m_axis_button_pos[1] = cnv_size.get_height() - button_icon_size[1] - 20 * sc;
- imgui.set_next_window_pos(m_axis_button_pos[0], m_axis_button_pos[1], ImGuiCond_Always, 0, 0);
-#ifdef __WINDOWS__
- imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always);
-#endif
+ ImVec2 btn_size = ImVec2(36.f, 36.f) * sc;
+ ImVec2 margin = ImVec2(m_canvas_toolbar_pos[0] > 0 ? 0.f : (10.f * sc), 10.f * sc);
+ ImVec2 spacing = ImVec2(6.f, 6.f) * sc;
+ ImVec2 padding = ImVec2(2.f, 2.f) * sc;
+ Vec2i32 pos = {
+ m_canvas_toolbar_pos[0] + margin.x,
+ get_canvas_size().get_height() - margin.y
+ };
+ bool zoom_btn = wxGetApp().show_canvas_zoom_button();
- imgui.begin(_L("Toggle Axis"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMove |
+ imgui.set_next_window_pos(pos[0], pos[1], ImGuiCond_Always, 0, 1); // pivot bottom-left
+
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0 );
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , {0,0});
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing , {0,0});
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding , padding); // without padding images clipping
+
+ imgui.begin(_L("Canvas Toolbar"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse);//
- ImTextureID normal_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_DARK : GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE);
- ImTextureID hover_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_DARK_HOVER : GLGizmosManager::MENU_ICON_NAME::IC_AXIS_TOGGLE_HOVER);
+ ImTextureID m_normal_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_MENU_DARK : GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_MENU);
+ ImTextureID m_hover_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_MENU_DARK_HOVER : GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_MENU_HOVER);
- ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0});
-
- if (ImGui::ImageButton3(normal_id, hover_id, button_icon_size, ImVec2(0, 0), ImVec2(1, 1), -1,
- ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1), ImVec2(10, 0))) {
- //select_view("plate");
-
- if (m_canvas_type == ECanvasType::CanvasView3D || m_canvas_type == ECanvasType::CanvasPreview) {
- toggle_world_axes_visibility(false);
+ if (ImGui::ImageButton3(m_normal_id, m_hover_id, btn_size)) {
+ if(!ImGui::IsPopupOpen("CanvasToolbarMenu")){
+ ImGui::SetNextWindowPos(ImVec2(pos[0] + padding.x, pos[1] - padding.y - (zoom_btn ? (btn_size.y + spacing.y) : 0.f)), ImGuiCond_Always, ImVec2(0, 1)); // pivot bottom-left
+ ImGui::OpenPopup("CanvasToolbarMenu");
}
+ }
+
+ if(zoom_btn){
+ ImGui::Dummy({ 0, spacing.y});
+ ImTextureID z_normal_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM_DARK : GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM);
+ ImTextureID z_hover_id = m_gizmos.get_icon_texture_id(m_is_dark ? GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM_DARK_HOVER : GLGizmosManager::MENU_ICON_NAME::IC_CANVAS_ZOOM_HOVER);
+
+ if (ImGui::ImageButton3(z_normal_id, z_hover_id, btn_size)) {
+ select_view("plate");
+ if (m_selection.is_empty()) {
+ if (m_canvas_type == ECanvasType::CanvasAssembleView)
+ zoom_to_volumes();
+ else
+ zoom_to_bed();
+ } else {
+ zoom_to_selection();
+ }
+ } else if (ImGui::IsItemHovered()) {
+ auto tooltip = _L("Fit camera to scene or selected object.");
+ auto width = ImGui::CalcTextSize(tooltip.c_str()).x + imgui.scaled(2.0f);
+ imgui.tooltip(tooltip, width);
+ }
}
- if (ImGui::IsItemHovered()) {
- auto temp_tooltip = _L("Toggle Axis");
- auto width = ImGui::CalcTextSize(temp_tooltip.c_str()).x + imgui.scaled(2.0f);
- imgui.tooltip(temp_tooltip, width);
+
+ ImGui::PopStyleVar(4); // Window
+
+ ImGui::PushStyleColor(ImGuiCol_PopupBg , m_is_dark ? ImGuiWrapper::COL_TOOLBAR_BG_DARK : ImGuiWrapper::COL_TOOLBAR_BG);
+ ImGui::PushStyleColor(ImGuiCol_Separator , m_is_dark ? ImVec4(1, 1, 1, .20f) : ImVec4(0, 0, 0, .2f));
+ ImGui::PushStyleColor(ImGuiCol_Text , m_is_dark ? ImVec4(1, 1, 1, .88f) : ImVec4(50 / 255.f, 58 / 255.f, 61 / 255.f, 1.f));
+ ImGui::PushStyleColor(ImGuiCol_TextDisabled , m_is_dark ? ImVec4(1, 1, 1, .44f) : ImVec4(50 / 255.f, 58 / 255.f, 61 / 255.f, .5f));
+ ImGui::PushStyleColor(ImGuiCol_HeaderHovered , ImVec4(0, 0, 0, 0.f)); // bg color for menu item
+ ImGui::PushStyleColor(ImGuiCol_BorderActive , ImGuiWrapper::COL_ORCA);
+ ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 0.f );
+ ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding , 8.f * sc);
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.f * sc);
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 2.f * sc);
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding , ImVec2(4.f, 10.f) * sc);
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing , ImVec2(0.f, 8.f ) * sc);
+
+ if (ImGui::BeginPopup("CanvasToolbarMenu")) {
+ ImGui::PushItemFlag(ImGuiItemFlags_SelectableDontClosePopup, true);
+
+ Plater* p = wxGetApp().plater();
+ AppConfig* cfg = wxGetApp().app_config;
+
+ auto create_menu_item = [this, sc](
+ const std::string& name,
+ bool enable,
+ bool condition,
+ const std::function& action
+ ) {
+ ImGui::Dummy({2.f * sc,0});
+ ImGui::SameLine();
+ if (ImGui::BBLMenuItem((" " + _u8L(name)).c_str(), nullptr, false, enable, ImGui::CalcTextSize(_u8L(name).c_str()).y))
+ action();
+ ImGui::SameLine(12.f * sc);
+ ImGui::TextColored(enable ? ImVec4(1,1,1,1) : ImGui::GetStyleColorVec4(ImGuiCol_TextDisabled), "%s", into_u8(condition ? ImGui::VisibleIcon : ImGui::HiddenIcon).c_str());
+ };
+
+ create_menu_item( "3D Navigator",
+ m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly
+ wxGetApp().show_3d_navigator(),
+ [this]{
+ wxGetApp().toggle_show_3d_navigator();
+ ImGui::CloseCurrentPopup(); // Close popup to show changes on UI
+ }
+ );
+
+ create_menu_item( "Zoom button",
+ true, // work on all
+ wxGetApp().show_canvas_zoom_button(),
+ [this]{
+ wxGetApp().toggle_canvas_zoom_button();
+ ImGui::CloseCurrentPopup(); // Close popup to show changes on UI
+ }
+ );
+
+ ImGui::Separator();
+
+ create_menu_item( "Overhangs",
+ m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare
+ p->is_view3D_overhang_shown(),
+ [this, p]{p->show_view3D_overhang(!p->is_view3D_overhang_shown());}
+ );
+
+ create_menu_item( "Outline",
+ m_canvas_type != ECanvasType::CanvasPreview, // not work on preview
+ wxGetApp().show_outline(),
+ [this]{wxGetApp().toggle_show_outline();}
+ );
+
+ ImGui::Separator();
+
+ create_menu_item( "Perspective",
+ true, // work on all
+ cfg->get_bool("use_perspective_camera"),
+ [this, &cfg]{
+ cfg->set_bool("use_perspective_camera", !(cfg->get_bool("use_perspective_camera")));
+ wxGetApp().update_ui_from_settings();
+ }
+ );
+
+ ImGui::Separator();
+
+ create_menu_item( "Axes",
+ m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly
+ m_show_world_axes,
+ [this]{toggle_world_axes_visibility(false);}
+ );
+
+ // will add an option for gridlines in here
+
+ create_menu_item( "Labels",
+ m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare
+ p->are_view3D_labels_shown(),
+ [this, p]{p->show_view3D_labels(!p->are_view3D_labels_shown());}
+ );
+
+ ImGui::PopItemFlag();
+ ImGui::EndPopup();
}
- ImGui::PopStyleVar(2);
+
+ ImGui::PopStyleColor(6);
+ ImGui::PopStyleVar(6);
imgui.end();
}
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index b3f6f106ea..17a388c731 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -538,7 +538,7 @@ private:
mutable IMToolbar m_sel_plate_toolbar;
mutable GLToolbar m_assemble_view_toolbar;
mutable IMReturnToolbar m_return_toolbar;
- mutable Vec2i32 m_axis_button_pos = {128, 5};
+ mutable Vec2i32 m_canvas_toolbar_pos = {140, 5};
mutable float m_sc{1};
mutable float m_paint_toolbar_width;
@@ -1255,7 +1255,7 @@ private:
void _render_imgui_select_plate_toolbar();
void _render_assemble_view_toolbar() const;
void _render_return_toolbar() const;
- void _render_camera_toolbar();
+ void _render_canvas_toolbar();
void _render_separator_toolbar_right() const;
void _render_separator_toolbar_left() const;
void _render_collapse_toolbar() const;
diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp
index ce0c24d08a..d133720c7e 100644
--- a/src/slic3r/GUI/GUI.cpp
+++ b/src/slic3r/GUI/GUI.cpp
@@ -108,7 +108,12 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt
try{
if (config.def()->get(opt_key)->type == coBools && config.def()->get(opt_key)->nullable) {
- auto vec_new = std::make_unique(1, boost::any_cast(value) );
+ const auto v = boost::any_cast(value);
+ auto vec_new = std::make_unique(1, v);
+ if (v == ConfigOptionBoolsNullable::nil_value()) {
+ vec_new->set_at_to_nil(0);
+ }
+
config.option(opt_key)->set_at(vec_new.get(), opt_index, 0);
return;
}
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 092bed49ae..01961271c6 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -42,6 +42,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -98,6 +99,7 @@
#include "UnsavedChangesDialog.hpp"
#include "SavePresetDialog.hpp"
#include "PrintHostDialogs.hpp"
+#include "NetworkPluginDialog.hpp"
#include "DesktopIntegrationDialog.hpp"
#include "SendSystemInfoDialog.hpp"
#include "ParamsDialog.hpp"
@@ -959,15 +961,7 @@ void GUI_App::post_init()
m_show_gcode_window = app_config->get_bool("show_gcode_window");
if (m_networking_need_update) {
- //updating networking
- int ret = updating_bambu_networking();
- if (!ret) {
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__<<":networking plugin updated successfully";
- //restart_networking();
- }
- else {
- BOOST_LOG_TRIVIAL(error) << __FUNCTION__<<":networking plugin updated failed";
- }
+ show_network_plugin_download_dialog(false);
}
// Start preset sync after project opened, otherwise we could have preset change during project opening which could cause crash
@@ -1177,12 +1171,20 @@ std::string GUI_App::get_plugin_url(std::string name, std::string country_code)
{
std::string url = get_http_url(country_code);
- std::string curr_version = NetworkAgent::use_legacy_network ? BAMBU_NETWORK_AGENT_VERSION_LEGACY : BAMBU_NETWORK_AGENT_VERSION;
+ std::string curr_version;
+ if (NetworkAgent::use_legacy_network) {
+ curr_version = BAMBU_NETWORK_AGENT_VERSION_LEGACY;
+ } else if (name == "plugins" && app_config) {
+ std::string user_version = app_config->get_network_plugin_version();
+ curr_version = user_version.empty() ? BBL::get_latest_network_version() : user_version;
+ } else {
+ curr_version = BBL::get_latest_network_version();
+ }
+
std::string using_version = curr_version.substr(0, 9) + "00";
if (name == "cameratools")
using_version = curr_version.substr(0, 6) + "00.00";
url += (boost::format("?slicer/%1%/cloud=%2%") % name % using_version).str();
- //url += (boost::format("?slicer/plugins/cloud=%1%") % "01.01.00.00").str();
return url;
}
@@ -1413,6 +1415,32 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP
return InstallStatusUnzipFailed;
}
+ boost::filesystem::path legacy_lib_path, legacy_lib_backup;
+ bool had_existing_legacy = false;
+ if (name == "plugins") {
+#if defined(_MSC_VER) || defined(_WIN32)
+ legacy_lib_path = plugin_folder / (std::string(BAMBU_NETWORK_LIBRARY) + ".dll");
+#elif defined(__WXMAC__)
+ legacy_lib_path = plugin_folder / (std::string("lib") + std::string(BAMBU_NETWORK_LIBRARY) + ".dylib");
+#else
+ legacy_lib_path = plugin_folder / (std::string("lib") + std::string(BAMBU_NETWORK_LIBRARY) + ".so");
+#endif
+ legacy_lib_backup = legacy_lib_path;
+ legacy_lib_backup += ".backup";
+
+ if (boost::filesystem::exists(legacy_lib_path)) {
+ had_existing_legacy = true;
+ boost::system::error_code ec;
+ boost::filesystem::rename(legacy_lib_path, legacy_lib_backup, ec);
+ if (ec) {
+ BOOST_LOG_TRIVIAL(warning) << "[install_plugin] failed to backup existing legacy library: " << ec.message();
+ had_existing_legacy = false;
+ } else {
+ BOOST_LOG_TRIVIAL(info) << "[install_plugin] backed up existing legacy library";
+ }
+ }
+ }
+
mz_uint num_entries = mz_zip_reader_get_num_files(&archive);
mz_zip_archive_file_stat stat;
BOOST_LOG_TRIVIAL(error) << boost::format("[install_plugin]: %1%, got %2% files")%__LINE__ %num_entries;
@@ -1487,6 +1515,47 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP
}
close_zip_reader(&archive);
+
+ if (name == "plugins") {
+ std::string config_version = app_config->get_network_plugin_version();
+ if (config_version.empty()) {
+ config_version = BBL::get_latest_network_version();
+ BOOST_LOG_TRIVIAL(info) << "[install_plugin] config_version was empty, using latest: " << config_version;
+ app_config->set_network_plugin_version(config_version);
+ GUI::wxGetApp().CallAfter([this] {
+ if (app_config)
+ app_config->save();
+ });
+ }
+ if (!config_version.empty() && boost::filesystem::exists(legacy_lib_path)) {
+#if defined(_MSC_VER) || defined(_WIN32)
+ auto versioned_lib = plugin_folder / (std::string(BAMBU_NETWORK_LIBRARY) + "_" + config_version + ".dll");
+#elif defined(__WXMAC__)
+ auto versioned_lib = plugin_folder / (std::string("lib") + std::string(BAMBU_NETWORK_LIBRARY) + "_" + config_version + ".dylib");
+#else
+ auto versioned_lib = plugin_folder / (std::string("lib") + std::string(BAMBU_NETWORK_LIBRARY) + "_" + config_version + ".so");
+#endif
+ BOOST_LOG_TRIVIAL(info) << "[install_plugin] renaming newly extracted " << legacy_lib_path.string() << " to " << versioned_lib.string();
+ boost::system::error_code ec;
+ if (boost::filesystem::exists(versioned_lib)) {
+ boost::filesystem::remove(versioned_lib, ec);
+ }
+ boost::filesystem::rename(legacy_lib_path, versioned_lib, ec);
+ if (ec) {
+ BOOST_LOG_TRIVIAL(error) << "[install_plugin] failed to rename to versioned: " << ec.message();
+ }
+ }
+
+ if (had_existing_legacy && boost::filesystem::exists(legacy_lib_backup)) {
+ BOOST_LOG_TRIVIAL(info) << "[install_plugin] restoring backed up legacy library";
+ boost::system::error_code ec;
+ boost::filesystem::rename(legacy_lib_backup, legacy_lib_path, ec);
+ if (ec) {
+ BOOST_LOG_TRIVIAL(warning) << "[install_plugin] failed to restore legacy library backup: " << ec.message();
+ }
+ }
+ }
+
{
fs::path dir_path(plugin_folder);
if (fs::exists(dir_path) && fs::is_directory(dir_path)) {
@@ -1519,6 +1588,8 @@ int GUI_App::install_plugin(std::string name, std::string package_name, InstallP
}
}
}
+
+
if (pro_fn)
pro_fn(InstallStatusInstallCompleted, 100, cancel);
if (name == "plugins")
@@ -1572,6 +1643,247 @@ void GUI_App::restart_networking()
BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(" exit, m_agent=%1%")%m_agent;
}
+// Network plugin hot reload timeout constants (in milliseconds)
+namespace {
+ constexpr int CALLBACK_DRAIN_TIMEOUT_MS = 200; // Time to drain pending CallAfter callbacks
+ constexpr int NETWORK_IDLE_TIMEOUT_MS = 500; // Max wait for network operations to complete
+ constexpr int FINAL_DRAIN_TIMEOUT_MS = 100; // Final event processing before destruction
+ constexpr int POLL_INTERVAL_MS = 50; // Polling interval for state checks
+ constexpr int MAX_YIELD_ITERATIONS = 20; // Maximum wxYield calls per drain cycle
+}
+
+// Process pending wx events with bounded iteration count
+void GUI_App::drain_pending_events(int timeout_ms)
+{
+ const auto deadline = std::chrono::steady_clock::now() +
+ std::chrono::milliseconds(timeout_ms);
+ int yield_count = 0;
+
+ while (std::chrono::steady_clock::now() < deadline) {
+ // Process pending events
+ if (wxTheApp) {
+ wxTheApp->ProcessPendingEvents();
+ }
+
+ // Bounded wxYield to prevent infinite loops
+ if (yield_count < MAX_YIELD_ITERATIONS) {
+ wxYield();
+ ++yield_count;
+ }
+
+ std::this_thread::sleep_for(std::chrono::milliseconds(POLL_INTERVAL_MS));
+ }
+}
+
+// Wait for network operations to complete with state verification
+bool GUI_App::wait_for_network_idle(int timeout_ms)
+{
+ const auto deadline = std::chrono::steady_clock::now() +
+ std::chrono::milliseconds(timeout_ms);
+
+ while (std::chrono::steady_clock::now() < deadline) {
+ if (!m_agent) {
+ return true; // Agent already gone
+ }
+
+ // Verify all operations completed
+ bool server_disconnected = !m_agent->is_server_connected();
+
+ if (server_disconnected) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": network is idle";
+ return true;
+ }
+
+ // Process events while waiting
+ if (wxTheApp) {
+ wxTheApp->ProcessPendingEvents();
+ }
+
+ std::this_thread::sleep_for(std::chrono::milliseconds(POLL_INTERVAL_MS));
+ }
+
+ BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": timeout after " << timeout_ms
+ << "ms, server_connected=" << (m_agent ? m_agent->is_server_connected() : false);
+ return false;
+}
+
+bool GUI_App::hot_reload_network_plugin()
+{
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": starting hot reload";
+
+ wxBusyCursor busy;
+ wxBusyInfo info(_L("Reloading network plugin..."), mainframe);
+ wxYield();
+ wxWindowDisabler disabler;
+
+ if (mainframe) {
+ int current_tab = mainframe->m_tabpanel->GetSelection();
+ if (current_tab == MainFrame::TabPosition::tpMonitor) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": navigating away from Monitor tab before unload";
+ mainframe->m_tabpanel->SetSelection(MainFrame::TabPosition::tp3DEditor);
+ }
+ }
+
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": stopping sync thread before unload";
+ if (m_user_sync_token) {
+ m_user_sync_token.reset();
+ }
+ if (m_sync_update_thread.joinable()) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": waiting for sync thread to finish";
+ m_sync_update_thread.join();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": sync thread finished";
+ }
+
+ if (m_agent) {
+ // Phase 1: Clear all callbacks (stops new invocations)
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 1 - clearing callbacks";
+ m_agent->set_on_ssdp_msg_fn(nullptr);
+ m_agent->set_on_user_login_fn(nullptr);
+ m_agent->set_on_printer_connected_fn(nullptr);
+ m_agent->set_on_server_connected_fn(nullptr);
+ m_agent->set_on_http_error_fn(nullptr);
+ m_agent->set_on_subscribe_failure_fn(nullptr);
+ m_agent->set_on_message_fn(nullptr);
+ m_agent->set_on_user_message_fn(nullptr);
+ m_agent->set_on_local_connect_fn(nullptr);
+ m_agent->set_on_local_message_fn(nullptr);
+ m_agent->set_queue_on_main_fn(nullptr);
+
+ // Phase 2: Drain pending CallAfter callbacks (bounded)
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 2 - draining callbacks";
+ drain_pending_events(CALLBACK_DRAIN_TIMEOUT_MS);
+
+ // Phase 3: Stop operations and verify return values
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 3 - stopping operations";
+ bool discovery_stopped = m_agent->start_discovery(false, false);
+ int disconnect_result = m_agent->disconnect_printer();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": discovery_stopped=" << discovery_stopped
+ << ", disconnect_result=" << disconnect_result;
+
+ // Phase 4: Wait for idle with state verification
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 4 - waiting for idle";
+ bool became_idle = wait_for_network_idle(NETWORK_IDLE_TIMEOUT_MS);
+ if (!became_idle) {
+ BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": proceeding despite timeout";
+ }
+
+ // Phase 5: Final bounded drain before destruction
+ drain_pending_events(FINAL_DRAIN_TIMEOUT_MS);
+
+ // Phase 6: Destroy agent
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 6 - destroying agent";
+ delete m_agent;
+ m_agent = nullptr;
+ }
+
+ // Phase 7: Unload module
+ if (Slic3r::NetworkAgent::is_network_module_loaded()) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Phase 7 - unloading module";
+ drain_pending_events(FINAL_DRAIN_TIMEOUT_MS);
+ int unload_result = Slic3r::NetworkAgent::unload_network_module();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": unload_result=" << unload_result;
+ }
+
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": calling restart_networking";
+ restart_networking();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": restart_networking returned";
+
+ std::string loaded_version = Slic3r::NetworkAgent::get_version();
+ bool success = m_agent != nullptr && !loaded_version.empty() && loaded_version != "00.00.00.00";
+ bool user_logged_in = m_agent && m_agent->is_user_login();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": after restart_networking, is_user_login = " << user_logged_in
+ << ", m_agent = " << (m_agent ? "valid" : "null")
+ << ", version = " << loaded_version;
+
+ if (success && m_agent && m_device_manager) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": connecting to cloud server";
+ m_agent->connect_server();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": re-subscribing to cloud printers";
+ m_device_manager->add_user_subscribe();
+ }
+
+ if (mainframe && mainframe->m_monitor) {
+ mainframe->m_monitor->update_network_version_footer();
+ mainframe->m_monitor->set_default();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": reset monitor panel";
+ }
+
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": hot reload " << (success ? "successful" : "failed");
+ return success;
+}
+
+std::string GUI_App::get_latest_network_version() const
+{
+ return BBL::get_latest_network_version();
+}
+
+bool GUI_App::has_network_update_available() const
+{
+ std::string current = Slic3r::NetworkAgent::get_version();
+ std::string latest = get_latest_network_version();
+
+ if (current.empty() || current == "00.00.00.00")
+ return false;
+
+ return current.substr(0, 8) != latest.substr(0, 8);
+}
+
+void GUI_App::show_network_plugin_download_dialog(bool is_update)
+{
+ auto load_error = Slic3r::NetworkAgent::get_load_error();
+
+ NetworkPluginDownloadDialog::Mode mode;
+ if (load_error.has_error) {
+ mode = NetworkPluginDownloadDialog::Mode::CorruptedPlugin;
+ } else if (is_update) {
+ mode = NetworkPluginDownloadDialog::Mode::UpdateAvailable;
+ } else {
+ mode = NetworkPluginDownloadDialog::Mode::MissingPlugin;
+ }
+
+ std::string current_version = Slic3r::NetworkAgent::get_version();
+
+ NetworkPluginDownloadDialog dlg(mainframe, mode, current_version,
+ load_error.message, load_error.technical_details);
+
+ int result = dlg.ShowModal();
+
+ switch (result) {
+ case NetworkPluginDownloadDialog::RESULT_DOWNLOAD:
+ {
+ std::string selected = dlg.get_selected_version();
+ app_config->set_network_plugin_version(selected);
+ app_config->save();
+
+ DownloadProgressDialog download_dlg(_L("Downloading Network Plugin"));
+ download_dlg.ShowModal();
+ }
+ break;
+
+ case NetworkPluginDownloadDialog::RESULT_REMIND_LATER:
+ app_config->set_remind_network_update_later(true);
+ app_config->save();
+ break;
+
+ case NetworkPluginDownloadDialog::RESULT_SKIP_VERSION:
+ {
+ std::string latest = get_latest_network_version();
+ app_config->add_skipped_network_version(latest);
+ app_config->save();
+ }
+ break;
+
+ case NetworkPluginDownloadDialog::RESULT_DONT_ASK:
+ app_config->set_network_update_prompt_disabled(true);
+ app_config->save();
+ break;
+
+ case NetworkPluginDownloadDialog::RESULT_SKIP:
+ default:
+ break;
+ }
+}
+
void GUI_App::remove_old_networking_plugins()
{
std::string data_dir_str = data_dir();
@@ -1601,8 +1913,20 @@ bool GUI_App::check_networking_version()
if (!network_ver.empty()) {
BOOST_LOG_TRIVIAL(info) << "get_network_agent_version=" << network_ver;
}
- std::string studio_ver = NetworkAgent::use_legacy_network ? BAMBU_NETWORK_AGENT_VERSION_LEGACY : BAMBU_NETWORK_AGENT_VERSION;
- if (network_ver.length() >= 8) {
+
+ std::string studio_ver;
+ if (NetworkAgent::use_legacy_network) {
+ studio_ver = BAMBU_NETWORK_AGENT_VERSION_LEGACY;
+ } else if (app_config) {
+ std::string user_version = app_config->get_network_plugin_version();
+ studio_ver = user_version.empty() ? BBL::get_latest_network_version() : user_version;
+ } else {
+ studio_ver = BBL::get_latest_network_version();
+ }
+
+ BOOST_LOG_TRIVIAL(info) << "check_networking_version: network_ver=" << network_ver << ", expected=" << studio_ver;
+
+ if (network_ver.length() >= 8 && studio_ver.length() >= 8) {
if (network_ver.substr(0,8) == studio_ver.substr(0,8)) {
m_networking_compatible = true;
return true;
@@ -2072,7 +2396,13 @@ void GUI_App::init_app_config()
}
// Change current dirtory of application
- [[maybe_unused]] auto unused_result = chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str());
+
+#ifdef _WIN32
+ [[maybe_unused]] auto unused_result = _chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str());
+#else
+ [[maybe_unused]] auto unused_result = chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str());
+#endif
+
} else {
m_datadir_redefined = true;
}
@@ -2669,8 +2999,11 @@ bool GUI_App::on_init_inner()
std::map extra_headers = get_extra_header();
Slic3r::Http::set_extra_headers(extra_headers);
- // Orca: select network plugin version
- NetworkAgent::use_legacy_network = app_config->get_bool("legacy_networking");
+ // Orca: select network plugin version based on configured version string
+ std::string configured_version = app_config->get_network_plugin_version();
+ NetworkAgent::use_legacy_network = (configured_version == BAMBU_NETWORK_AGENT_VERSION_LEGACY);
+ BOOST_LOG_TRIVIAL(info) << "Network plugin mode: "
+ << (NetworkAgent::use_legacy_network ? ("legacy (version: " + std::string(BAMBU_NETWORK_AGENT_VERSION_LEGACY) + ")") : ("modern (version: " + configured_version + ")"));
// Force legacy network plugin if debugger attached
// See https://github.com/bambulab/BambuStudio/issues/6726
/* if (!NetworkAgent::use_legacy_network) {
@@ -2858,78 +3191,103 @@ void GUI_App::copy_network_if_available()
{
if (app_config->get("update_network_plugin") != "true")
return;
- std::string network_library, player_library, live555_library, network_library_dst, player_library_dst, live555_library_dst;
+
std::string data_dir_str = data_dir();
boost::filesystem::path data_dir_path(data_dir_str);
auto plugin_folder = data_dir_path / "plugins";
auto cache_folder = data_dir_path / "ota";
std::string changelog_file = cache_folder.string() + "/network_plugins.json";
+
+ std::string cached_version;
+ if (boost::filesystem::exists(changelog_file)) {
+ try {
+ boost::nowide::ifstream ifs(changelog_file);
+ json j;
+ ifs >> j;
+ if (j.contains("version"))
+ cached_version = j["version"];
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": cached_version = " << cached_version;
+ } catch (nlohmann::detail::parse_error& err) {
+ BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << changelog_file << " failed: " << err.what();
+ }
+ }
+
+ if (cached_version.empty()) {
+ BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": no version found in changelog, aborting copy";
+ app_config->set("update_network_plugin", "false");
+ return;
+ }
+
+ std::string network_library, player_library, live555_library, network_library_dst, player_library_dst, live555_library_dst;
#if defined(_MSC_VER) || defined(_WIN32)
network_library = cache_folder.string() + "/bambu_networking.dll";
- player_library = cache_folder.string() + "/BambuSource.dll";
- live555_library = cache_folder.string() + "/live555.dll";
- network_library_dst = plugin_folder.string() + "/bambu_networking.dll";
- player_library_dst = plugin_folder.string() + "/BambuSource.dll";
+ player_library = cache_folder.string() + "/BambuSource.dll";
+ live555_library = cache_folder.string() + "/live555.dll";
+ network_library_dst = plugin_folder.string() + "/" + std::string(BAMBU_NETWORK_LIBRARY) + "_" + cached_version + ".dll";
+ player_library_dst = plugin_folder.string() + "/BambuSource.dll";
live555_library_dst = plugin_folder.string() + "/live555.dll";
#elif defined(__WXMAC__)
network_library = cache_folder.string() + "/libbambu_networking.dylib";
player_library = cache_folder.string() + "/libBambuSource.dylib";
live555_library = cache_folder.string() + "/liblive555.dylib";
- network_library_dst = plugin_folder.string() + "/libbambu_networking.dylib";
+ network_library_dst = plugin_folder.string() + "/lib" + std::string(BAMBU_NETWORK_LIBRARY) + "_" + cached_version + ".dylib";
player_library_dst = plugin_folder.string() + "/libBambuSource.dylib";
live555_library_dst = plugin_folder.string() + "/liblive555.dylib";
#else
network_library = cache_folder.string() + "/libbambu_networking.so";
- player_library = cache_folder.string() + "/libBambuSource.so";
- live555_library = cache_folder.string() + "/liblive555.so";
- network_library_dst = plugin_folder.string() + "/libbambu_networking.so";
- player_library_dst = plugin_folder.string() + "/libBambuSource.so";
+ player_library = cache_folder.string() + "/libBambuSource.so";
+ live555_library = cache_folder.string() + "/liblive555.so";
+ network_library_dst = plugin_folder.string() + "/lib" + std::string(BAMBU_NETWORK_LIBRARY) + "_" + cached_version + ".so";
+ player_library_dst = plugin_folder.string() + "/libBambuSource.so";
live555_library_dst = plugin_folder.string() + "/liblive555.so";
#endif
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": checking network_library " << network_library << ", player_library " << player_library;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": checking network_library " << network_library << ", player_library " << player_library;
if (!boost::filesystem::exists(plugin_folder)) {
- BOOST_LOG_TRIVIAL(info)<< __FUNCTION__ << ": create directory "<set(SETTING_NETWORK_PLUGIN_VERSION, cached_version);
+ app_config->save();
}
if (boost::filesystem::exists(player_library)) {
CopyFileResult cfr = copy_file(player_library, player_library_dst, error_message, false);
if (cfr != CopyFileResult::SUCCESS) {
- BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": Copying failed(" << cfr << "): " << error_message;
+ BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": Copying failed(" << cfr << "): " << error_message;
return;
}
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(player_library_dst, perms);
fs::remove(player_library);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying player library from" << player_library << " to " << player_library_dst<<" successfully.";
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Copying player library from " << player_library << " to " << player_library_dst << " successfully.";
}
if (boost::filesystem::exists(live555_library)) {
CopyFileResult cfr = copy_file(live555_library, live555_library_dst, error_message, false);
if (cfr != CopyFileResult::SUCCESS) {
- BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": Copying failed(" << cfr << "): " << error_message;
+ BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": Copying failed(" << cfr << "): " << error_message;
return;
}
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(live555_library_dst, perms);
fs::remove(live555_library);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying live555 library from" << live555_library << " to " << live555_library_dst<<" successfully.";
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": Copying live555 library from " << live555_library << " to " << live555_library_dst << " successfully.";
}
if (boost::filesystem::exists(changelog_file))
fs::remove(changelog_file);
@@ -2940,13 +3298,39 @@ bool GUI_App::on_init_network(bool try_backup)
{
bool create_network_agent = false;
auto should_load_networking_plugin = app_config->get_bool("installed_networking");
+
+ std::string config_version = app_config->get_network_plugin_version();
+
if(!should_load_networking_plugin) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Don't load plugin as installed_networking is false";
} else {
- int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module();
+ if (config_version.empty()) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": no version configured, need to download";
+ m_networking_need_update = true;
+
+ if (!m_device_manager)
+ m_device_manager = new Slic3r::DeviceManager();
+ if (!m_user_manager)
+ m_user_manager = new Slic3r::UserManager();
+
+ return false;
+ }
+ int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(false, config_version);
__retry:
if (!load_agent_dll) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, load dll ok";
+
+ std::string loaded_version = Slic3r::NetworkAgent::get_version();
+ if (app_config && !loaded_version.empty() && loaded_version != "00.00.00.00") {
+ std::string config_version = app_config->get_network_plugin_version();
+ std::string config_base = BBL::extract_base_version(config_version);
+ if (config_base != loaded_version) {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": syncing config version from " << config_version << " to loaded " << loaded_version;
+ app_config->set(SETTING_NETWORK_PLUGIN_VERSION, loaded_version);
+ app_config->save();
+ }
+ }
+
if (check_networking_version()) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_init_network, compatibility version";
auto bambu_source = Slic3r::NetworkAgent::get_bambu_source_entry();
@@ -2963,7 +3347,7 @@ __retry:
if (try_backup) {
int result = Slic3r::NetworkAgent::unload_network_module();
BOOST_LOG_TRIVIAL(info) << "on_init_network, version mismatch, unload_network_module, result = " << result;
- load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(true);
+ load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(true, config_version);
try_backup = false;
goto __retry;
}
@@ -3042,6 +3426,24 @@ __retry:
m_user_manager = new Slic3r::UserManager();
}
+ if (create_network_agent && m_networking_compatible && !NetworkAgent::use_legacy_network) {
+ app_config->clear_remind_network_update_later();
+
+ if (has_network_update_available()) {
+ std::string latest = get_latest_network_version();
+
+ bool should_prompt = !app_config->is_network_update_prompt_disabled()
+ && !app_config->is_network_version_skipped(latest)
+ && !app_config->should_remind_network_update_later();
+
+ if (should_prompt) {
+ CallAfter([this]() {
+ show_network_plugin_download_dialog(true);
+ });
+ }
+ }
+ }
+
return true;
}
@@ -3415,7 +3817,7 @@ void GUI_App::set_side_menu_popup_status(bool status)
m_side_popup_status = status;
}
-void GUI_App::link_to_network_check()
+std::string GUI_App::link_to_network_check()
{
std::string url;
std::string country_code = app_config->get_country_code();
@@ -3430,10 +3832,11 @@ void GUI_App::link_to_network_check()
else {
url = "https://status.bambulab.com";
}
- wxLaunchDefaultBrowser(url);
+ //wxLaunchDefaultBrowser(url);
+ return url; // ORCA
}
-void GUI_App::link_to_lan_only_wiki()
+std::string GUI_App::link_to_lan_only_wiki()
{
std::string url;
std::string country_code = app_config->get_country_code();
@@ -3447,7 +3850,8 @@ void GUI_App::link_to_lan_only_wiki()
else {
url = "https://wiki.bambulab.com/en/knowledge-sharing/enable-lan-mode";
}
- wxLaunchDefaultBrowser(url);
+ //wxLaunchDefaultBrowser(url);
+ return url; // ORCA
}
bool GUI_App::tabs_as_menu() const
@@ -4880,7 +5284,84 @@ void GUI_App::check_new_version_sf(bool show_tips, int by_user)
bool GUI_App::process_network_msg(std::string dev_id, std::string msg)
{
if (dev_id.empty()) {
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << msg;
+ if (msg == "wait_info") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, wait_info";
+ Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
+ if (!dev)
+ return true;
+ MachineObject* obj = dev->get_selected_machine();
+ if (obj && m_agent)
+ m_agent->install_device_cert(obj->get_dev_id(), obj->is_lan_mode_printer());
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("Retrieving printer information, please try again later."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "update_studio") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, update_studio";
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("Please try updating OrcaSlicer and then try again."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "update_fixed_studio") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, update_fixed_studio";
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("Please try updating OrcaSlicer and then try again."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "cert_expired") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, cert_expired";
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("The certificate has expired. Please check the time settings or update OrcaSlicer and try again."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "cert_revoked") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, cert_revoked";
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("The certificate is no longer valid and the printing functions are unavailable."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "update_firmware_studio") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, firmware internal error";
+ if (!m_show_error_msgdlg) {
+ MessageDialog msg_dlg(nullptr, _L("Internal error. Please try upgrading the firmware and OrcaSlicer version. If the issue persists, contact support."), "", wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ }
+ return true;
+ }
+ else if (msg == "unsigned_studio") {
+ BOOST_LOG_TRIVIAL(info) << "process_network_msg, unsigned_studio";
+ MessageDialog msg_dlg(nullptr,
+ _L("Bambu Lab has implemented a signature verification check in their network plugin that restricts "
+ "third-party software from communicating with your printer.\n\n"
+ "As a result, some printing functions are unavailable in OrcaSlicer."),
+ _L("Network Plugin Restriction"), wxAPPLY | wxOK);
+ m_show_error_msgdlg = true;
+ msg_dlg.ShowModal();
+ m_show_error_msgdlg = false;
+ return true;
+ }
}
else if (msg == "device_cert_installed") {
BOOST_LOG_TRIVIAL(info) << "process_network_msg, device_cert_installed";
@@ -4889,7 +5370,6 @@ bool GUI_App::process_network_msg(std::string dev_id, std::string msg)
obj->update_device_cert_state(true);
}
}
-
return true;
}
else if (msg == "device_cert_uninstalled") {
@@ -4899,7 +5379,6 @@ bool GUI_App::process_network_msg(std::string dev_id, std::string msg)
obj->update_device_cert_state(false);
}
}
-
return true;
}
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index f3900f6128..b84dc97c54 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -312,6 +312,7 @@ private:
bool m_adding_script_handler { false };
bool m_side_popup_status{false};
bool m_show_http_errpr_msgdlg{false};
+ bool m_show_error_msgdlg{false};
wxString m_info_dialog_content;
HttpServer m_http_server;
bool m_show_gcode_window{true};
@@ -355,6 +356,9 @@ public:
bool show_3d_navigator() const { return app_config->get_bool("show_3d_navigator"); }
void toggle_show_3d_navigator() const { app_config->set_bool("show_3d_navigator", !show_3d_navigator()); }
+ bool show_canvas_zoom_button() const { return app_config->get_bool("show_canvas_zoom_button"); }
+ void toggle_canvas_zoom_button() const { app_config->set_bool("show_canvas_zoom_button", !show_canvas_zoom_button()); }
+
bool show_outline() const { return app_config->get_bool("show_outline"); }
void toggle_show_outline() const { app_config->set_bool("show_outline", !show_outline()); }
@@ -403,8 +407,8 @@ public:
//update side popup status
bool get_side_menu_popup_status();
void set_side_menu_popup_status(bool status);
- void link_to_network_check();
- void link_to_lan_only_wiki();
+ std::string link_to_network_check(); // ORCA
+ std::string link_to_lan_only_wiki(); // ORCA
const wxColour& get_label_clr_modified() { return m_color_label_modified; }
const wxColour& get_label_clr_sys() { return m_color_label_sys; }
@@ -686,6 +690,11 @@ public:
void restart_networking();
void check_config_updates_from_updater() { check_updates(false); }
+ void show_network_plugin_download_dialog(bool is_update = false);
+ bool hot_reload_network_plugin();
+ std::string get_latest_network_version() const;
+ bool has_network_update_available() const;
+
private:
int updating_bambu_networking();
bool on_init_inner();
@@ -694,6 +703,8 @@ private:
void init_networking_callbacks();
void init_app_config();
void remove_old_networking_plugins();
+ void drain_pending_events(int timeout_ms);
+ bool wait_for_network_idle(int timeout_ms);
//BBS set extra header for http request
std::map get_extra_header();
void init_http_extra_header();
@@ -712,6 +723,7 @@ private:
bool m_init_app_config_from_older { false };
bool m_datadir_redefined { false };
std::string m_older_data_dir_path;
+ bool m_unsigned_plugin_warning_shown { false };
boost::optional m_last_config_version;
bool m_config_corrupted { false };
std::string m_open_method;
diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp
index e7520b5b51..44dd7b8f6e 100644
--- a/src/slic3r/GUI/GUI_Factories.cpp
+++ b/src/slic3r/GUI/GUI_Factories.cpp
@@ -87,14 +87,14 @@ std::map> SettingsFactory::OBJECT_C
{"precise_z_height", "",10}
}},
- { L("Support"), {{"brim_type", "",1},{"brim_width", "",2},{"brim_object_gap", "",3},
- {"enable_support", "",4},{"support_type", "",5},{"support_threshold_angle", "",6}, {"support_threshold_overlap", "",6}, {"support_on_build_plate_only", "",7},
- {"support_filament", "",8},{"support_interface_filament", "",9},{"support_expansion", "",24},{"support_style", "",25},
- {"tree_support_brim_width", "",26}, {"tree_support_branch_angle", "",10},{"tree_support_branch_angle_organic","",10}, {"tree_support_wall_count", "",11},{"tree_support_branch_diameter_angle", "",11},//tree support
- {"support_top_z_distance", "",13},{"support_bottom_z_distance", "",12},{"support_base_pattern", "",14},{"support_base_pattern_spacing", "",15},
- {"support_interface_top_layers", "",16},{"support_interface_bottom_layers", "",17},{"support_interface_spacing", "",18},{"support_bottom_interface_spacing", "",19},
- {"support_object_xy_distance", "",20}, {"bridge_no_support", "",21},{"max_bridge_length", "",22},{"support_critical_regions_only", "",23},{"support_remove_small_overhang","",27},
- {"support_object_first_layer_gap","",28}
+ { L("Support"), {{"brim_type", "",1},{"brim_width", "",2},{"brim_object_gap", "",3},{"brim_use_efc_outline", "",4},
+ {"enable_support", "",5},{"support_type", "",6},{"support_threshold_angle", "",7}, {"support_threshold_overlap", "",8}, {"support_on_build_plate_only", "",9},
+ {"support_filament", "",10},{"support_interface_filament", "",11},{"support_expansion", "",12},{"support_style", "",13},
+ {"tree_support_brim_width", "",14}, {"tree_support_branch_angle", "",15},{"tree_support_branch_angle_organic","",16}, {"tree_support_wall_count", "",17},{"tree_support_branch_diameter_angle", "",18},//tree support
+ {"support_bottom_z_distance", "",19},{"support_top_z_distance", "",20},{"support_base_pattern", "",21},{"support_base_pattern_spacing", "",22},
+ {"support_interface_top_layers", "",23},{"support_interface_bottom_layers", "",24},{"support_interface_spacing", "",25},{"support_bottom_interface_spacing", "",26},
+ {"support_object_xy_distance", "",27}, {"bridge_no_support", "",28},{"max_bridge_length", "",29},{"support_critical_regions_only", "",30},{"support_remove_small_overhang","",31},
+ {"support_object_first_layer_gap","",32}
}},
{ L("Speed"), {{"support_speed", "",12}, {"support_interface_speed", "",13}
}}
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
index 04e65fc88a..0ca62d849a 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
@@ -281,23 +281,43 @@ bool GLGizmosManager::init_icon_textures()
else
return false;
- if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/axis_toggle.svg", 64, 64, texture_id))
- icon_list.insert(std::make_pair((int) IC_AXIS_TOGGLE, texture_id));
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_menu.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_MENU, texture_id));
else
return false;
- if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/axis_toggle_hover.svg", 64, 64, texture_id))
- icon_list.insert(std::make_pair((int) IC_AXIS_TOGGLE_HOVER, texture_id));
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_menu_hover.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_MENU_HOVER, texture_id));
else
return false;
- if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/axis_toggle_dark.svg", 64, 64, texture_id))
- icon_list.insert(std::make_pair((int) IC_AXIS_TOGGLE_DARK, texture_id));
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_menu_dark.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_MENU_DARK, texture_id));
else
return false;
- if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/axis_toggle_hover_dark.svg", 64, 64, texture_id))
- icon_list.insert(std::make_pair((int) IC_AXIS_TOGGLE_DARK_HOVER, texture_id));
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_menu_dark_hover.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_MENU_DARK_HOVER, texture_id));
+ else
+ return false;
+
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_zoom.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_ZOOM, texture_id));
+ else
+ return false;
+
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_zoom_hover.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_ZOOM_HOVER, texture_id));
+ else
+ return false;
+
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_zoom_dark.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_ZOOM_DARK, texture_id));
+ else
+ return false;
+
+ if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/canvas_zoom_dark_hover.svg", 72, 72, texture_id))
+ icon_list.insert(std::make_pair((int) IC_CANVAS_ZOOM_DARK_HOVER, texture_id));
else
return false;
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
index ba7d5afdb9..5897c2a512 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
@@ -170,10 +170,14 @@ public:
IC_TOOLBAR_TOOLTIP,
IC_TOOLBAR_TOOLTIP_HOVER,
IC_NAME_COUNT,
- IC_AXIS_TOGGLE,
- IC_AXIS_TOGGLE_HOVER,
- IC_AXIS_TOGGLE_DARK,
- IC_AXIS_TOGGLE_DARK_HOVER,
+ IC_CANVAS_MENU,
+ IC_CANVAS_MENU_HOVER,
+ IC_CANVAS_MENU_DARK,
+ IC_CANVAS_MENU_DARK_HOVER,
+ IC_CANVAS_ZOOM,
+ IC_CANVAS_ZOOM_HOVER,
+ IC_CANVAS_ZOOM_DARK,
+ IC_CANVAS_ZOOM_DARK_HOVER,
};
explicit GLGizmosManager(GLCanvas3D& parent);
diff --git a/src/slic3r/GUI/ImageDPIFrame.cpp b/src/slic3r/GUI/ImageDPIFrame.cpp
index 06c3f59c3f..2133f18784 100644
--- a/src/slic3r/GUI/ImageDPIFrame.cpp
+++ b/src/slic3r/GUI/ImageDPIFrame.cpp
@@ -29,6 +29,14 @@ ImageDPIFrame::ImageDPIFrame()
#ifdef __APPLE__
SetWindowStyleFlag(GetWindowStyleFlag() | wxSTAY_ON_TOP);
#endif
+
+ // ORCA add border
+ Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) {
+ wxPaintDC dc(this);
+ dc.SetPen(StateColor::darkModeColorFor(wxColour("#DBDBDB")));
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0);
+ });
m_sizer_main = new wxBoxSizer(wxVERTICAL);
diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp
index 032ed288dd..856864d5c1 100644
--- a/src/slic3r/GUI/Jobs/EmbossJob.cpp
+++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp
@@ -427,16 +427,18 @@ void UpdateJob::update_volume(ModelVolume *volume, TriangleMesh &&mesh, const Da
volume->set_new_unique_id();
volume->calculate_convex_hull();
- // write data from base into volume
- base.write(*volume);
-
GUI_App &app = wxGetApp(); // may be move to input
+
if (volume->name != base.volume_name) {
- volume->name = base.volume_name;
+ // write data from base into volume
+ base.write(*volume);
const ObjectList *obj_list = app.obj_list();
if (obj_list != nullptr)
update_name_in_list(*obj_list, *volume);
+ } else {
+ // write data from base into volume
+ base.write(*volume);
}
ModelObject *object = volume->get_object();
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
index c1ff0b4584..711228c0bc 100644
--- a/src/slic3r/GUI/Jobs/FillBedJob.cpp
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -342,7 +342,7 @@ void FillBedJob::finalize(bool canceled, std::exception_ptr &eptr)
//model_object->ensure_on_bed();
//BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": model_object->ensure_on_bed()";
- if (m_instances && wxGetApp().app_config->get("auto_arrange") == "true") {
+ if (m_instances) {// && wxGetApp().app_config->get("auto_arrange") == "true") {
m_plater->set_prepare_state(Job::PREPARE_STATE_MENU);
m_plater->arrange();
}
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 717d2c666f..ba98bfc470 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -3113,7 +3113,7 @@ void MainFrame::init_menubar_as_editor()
// help
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Tutorial"), _L("Calibration help"),
[this](wxCommandEvent&) {
- std::string url = "https://github.com/OrcaSlicer/OrcaSlicer/wiki/Calibration";
+ std::string url = "https://www.orcaslicer.com/wiki/Calibration";
if (const std::string country_code = wxGetApp().app_config->get_country_code(); country_code == "CN") {
// Use gitee mirror for China users
url = "https://gitee.com/n0isyfox/orca-slicer-docs/wikis/%E6%A0%A1%E5%87%86/%E6%89%93%E5%8D%B0%E5%8F%82%E6%95%B0%E6%A0%A1%E5%87%86";
@@ -3229,7 +3229,7 @@ void MainFrame::init_menubar_as_editor()
[this]() {return m_plater->is_view3D_shown();; }, this);
// help
append_menu_item(calib_menu, wxID_ANY, _L("Tutorial"), _L("Calibration help"),
- [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://github.com/OrcaSlicer/OrcaSlicer/wiki/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr,
+ [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/Calibration", wxBROWSER_NEW_WINDOW); }, "", nullptr,
[this]() {return m_plater->is_view3D_shown();; }, this);
m_menubar->Append(calib_menu,wxString::Format("&%s", _L("Calibration")));
diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp
index 7869662d7c..c412b5585a 100644
--- a/src/slic3r/GUI/MediaPlayCtrl.cpp
+++ b/src/slic3r/GUI/MediaPlayCtrl.cpp
@@ -769,7 +769,7 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install)
auto file_dll = tools_dir + dll;
auto file_dll2 = plugins_dir + dll;
if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2))
- boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists);
+ boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_options::overwrite_existing);
}
boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir),
boost::process::windows::create_no_window,
diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp
index aa1e3e2ea8..02b2306ff3 100644
--- a/src/slic3r/GUI/Monitor.cpp
+++ b/src/slic3r/GUI/Monitor.cpp
@@ -1,6 +1,8 @@
#include "Tab.hpp"
#include "libslic3r/Utils.hpp"
#include "libslic3r/Model.hpp"
+#include "libslic3r/AppConfig.hpp"
+#include "slic3r/Utils/bambu_networking.hpp"
#include
#include
@@ -195,6 +197,11 @@ void MonitorPanel::init_tabpanel()
m_hms_panel = new HMSPanel(m_tabpanel);
m_tabpanel->AddPage(m_hms_panel, _L("Assistant(HMS)"), "", false);
+ std::string network_ver = Slic3r::NetworkAgent::get_version();
+ if (!network_ver.empty()) {
+ m_tabpanel->SetFooterText(wxString::Format("Network plugin v%s", network_ver));
+ }
+
m_initialized = true;
show_status((int)MonitorStatus::MONITOR_NO_PRINTER);
}
@@ -407,6 +414,7 @@ bool MonitorPanel::Show(bool show)
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (show) {
start_update();
+ update_network_version_footer();
m_refresh_timer->Stop();
m_refresh_timer->SetOwner(this);
@@ -517,5 +525,25 @@ void MonitorPanel::jump_to_LiveView()
m_status_info_panel->get_media_play_ctrl()->jump_to_play();
}
+void MonitorPanel::update_network_version_footer()
+{
+ std::string binary_version = Slic3r::NetworkAgent::get_version();
+ if (binary_version.empty())
+ return;
+
+ std::string configured_version = wxGetApp().app_config->get_network_plugin_version();
+ std::string suffix = BBL::extract_suffix(configured_version);
+ std::string configured_base = BBL::extract_base_version(configured_version);
+
+ wxString footer_text;
+ if (!suffix.empty() && configured_base == binary_version) {
+ footer_text = wxString::Format("Network plugin v%s (%s)", binary_version, suffix);
+ } else {
+ footer_text = wxString::Format("Network plugin v%s", binary_version);
+ }
+
+ m_tabpanel->SetFooterText(footer_text);
+}
+
} // GUI
} // Slic3r
diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp
index a7f7126534..b7502b9d51 100644
--- a/src/slic3r/GUI/Monitor.hpp
+++ b/src/slic3r/GUI/Monitor.hpp
@@ -157,6 +157,7 @@ public:
void jump_to_HMS();
void jump_to_LiveView();
+ void update_network_version_footer();
};
diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp
index 0e6e1a324d..049a6b00f2 100644
--- a/src/slic3r/GUI/MsgDialog.cpp
+++ b/src/slic3r/GUI/MsgDialog.cpp
@@ -586,7 +586,8 @@ wxBoxSizer *Newer3mfVersionDialog::get_msg_sizer()
if (file_version_newer) {
text1 = new wxStaticText(this, wxID_ANY, _L("The 3MF file version is in Beta and it is newer than the current OrcaSlicer version."));
wxStaticText * text2 = new wxStaticText(this, wxID_ANY, _L("If you would like to try Orca Slicer Beta, you may click to"));
- wxHyperlinkCtrl *github_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Download Beta Version"), "https://github.com/bambulab/BambuStudio/releases");
+ // ORCA standardized HyperLink
+ HyperLink * github_link = new HyperLink(this, _L("Download Beta Version"), "https://github.com/SoftFever/OrcaSlicer/releases");
horizontal_sizer->Add(text2, 0, wxEXPAND, 0);
horizontal_sizer->Add(github_link, 0, wxEXPAND | wxLEFT, 5);
@@ -672,11 +673,9 @@ NetworkErrorDialog::NetworkErrorDialog(wxWindow* parent)
wxBoxSizer* sizer_link = new wxBoxSizer(wxVERTICAL);
- m_link_server_state = new wxHyperlinkCtrl(this, wxID_ANY, _L("Check the status of current system services"), "");
+ // ORCA standardized HyperLink
+ m_link_server_state = new HyperLink(this, _L("Check the status of current system services"), wxGetApp().link_to_network_check());
m_link_server_state->SetFont(::Label::Body_13);
- m_link_server_state->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {wxGetApp().link_to_network_check(); });
- m_link_server_state->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
- m_link_server_state->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
sizer_link->Add(m_link_server_state, 0, wxALL, 0);
@@ -690,11 +689,9 @@ NetworkErrorDialog::NetworkErrorDialog(wxWindow* parent)
m_text_proposal->SetFont(::Label::Body_14);
m_text_proposal->SetForegroundColour(0x323A3C);
- m_text_wiki = new wxHyperlinkCtrl(this, wxID_ANY, _L("How to use LAN only mode"), "");
+ // ORCA standardized HyperLink
+ m_text_wiki = new HyperLink(this, _L("How to use LAN only mode"), wxGetApp().link_to_lan_only_wiki());
m_text_wiki->SetFont(::Label::Body_13);
- m_text_wiki->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {wxGetApp().link_to_lan_only_wiki(); });
- m_text_wiki->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); });
- m_text_wiki->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); });
sizer_help->Add(m_text_proposal, 0, wxEXPAND, 0);
sizer_help->Add(m_text_wiki, 0, wxALL, 0);
diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp
index 7b4eb71612..bb3abde75c 100644
--- a/src/slic3r/GUI/MsgDialog.hpp
+++ b/src/slic3r/GUI/MsgDialog.hpp
@@ -14,6 +14,7 @@
#include "Widgets/Button.hpp"
#include "Widgets/CheckBox.hpp"
#include "Widgets/TextInput.hpp"
+#include "Widgets/HyperLink.hpp"
#include "BBLStatusBar.hpp"
#include "BBLStatusBarSend.hpp"
#include "libslic3r/Semver.hpp"
@@ -424,9 +425,9 @@ public:
private:
Label* m_text_basic;
- wxHyperlinkCtrl* m_link_server_state;
+ HyperLink* m_link_server_state; // ORCA
Label* m_text_proposal;
- wxHyperlinkCtrl* m_text_wiki;
+ HyperLink* m_text_wiki; // ORCA
Button * m_button_confirm;
public:
diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp
index 3956f89072..5b0ca791b7 100644
--- a/src/slic3r/GUI/MultiMachineManagerPage.cpp
+++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp
@@ -653,7 +653,7 @@ void MultiMachineManagerPage::start_timer()
m_flipping_timer->SetOwner(this);
m_flipping_timer->Start(1000);
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxTimerEvent(*m_flipping_timer));
}
void MultiMachineManagerPage::update_page_number()
diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp
index f7cb05a80e..b9b71ad670 100644
--- a/src/slic3r/GUI/MultiMachinePage.cpp
+++ b/src/slic3r/GUI/MultiMachinePage.cpp
@@ -61,7 +61,7 @@ bool MultiMachinePage::Show(bool show)
m_refresh_timer->Stop();
m_refresh_timer->SetOwner(this);
m_refresh_timer->Start(2000);
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxTimerEvent(*m_refresh_timer));
}
else {
m_refresh_timer->Stop();
@@ -96,7 +96,7 @@ void MultiMachinePage::init_timer()
m_refresh_timer = new wxTimer();
//m_refresh_timer->SetOwner(this);
//m_refresh_timer->Start(8000);
- //wxPostEvent(this, wxTimerEvent());
+ //wxPostEvent(this, wxTimerEvent(*m_refresh_timer));
}
void MultiMachinePage::on_timer(wxTimerEvent& event)
@@ -482,7 +482,7 @@ bool MultiMachinePickPage::Show(bool show)
//m_refresh_timer->Stop();
//m_refresh_timer->SetOwner(this);
//m_refresh_timer->Start(4000);
- //wxPostEvent(this, wxTimerEvent());
+ //wxPostEvent(this, wxTimerEvent(*m_refresh_timer));
}
else {
//m_refresh_timer->Stop();
diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp
index 37321063f8..0b0b422eb4 100644
--- a/src/slic3r/GUI/MultiTaskManagerPage.cpp
+++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp
@@ -1402,7 +1402,7 @@ void CloudTaskManagerPage::start_timer()
m_flipping_timer->SetOwner(this);
m_flipping_timer->Start(1000);
- wxPostEvent(this, wxTimerEvent());
+ wxPostEvent(this, wxTimerEvent(*m_flipping_timer));
}
void CloudTaskManagerPage::on_timer(wxTimerEvent& event)
diff --git a/src/slic3r/GUI/NetworkPluginDialog.cpp b/src/slic3r/GUI/NetworkPluginDialog.cpp
new file mode 100644
index 0000000000..5c1e158748
--- /dev/null
+++ b/src/slic3r/GUI/NetworkPluginDialog.cpp
@@ -0,0 +1,377 @@
+#include "NetworkPluginDialog.hpp"
+#include "I18N.hpp"
+#include "GUI_App.hpp"
+#include "MainFrame.hpp"
+#include "MsgDialog.hpp"
+#include "Widgets/Label.hpp"
+#include "BitmapCache.hpp"
+#include "wxExtensions.hpp"
+#include "slic3r/Utils/bambu_networking.hpp"
+
+#include
+#include
+#include
+
+namespace Slic3r {
+namespace GUI {
+
+NetworkPluginDownloadDialog::NetworkPluginDownloadDialog(wxWindow* parent, Mode mode,
+ const std::string& current_version,
+ const std::string& error_message,
+ const std::string& error_details)
+ : DPIDialog(parent, wxID_ANY, mode == Mode::UpdateAvailable ?
+ _L("Network Plugin Update Available") : _L("Bambu Network Plugin Required"),
+ wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
+ , m_mode(mode)
+ , m_error_message(error_message)
+ , m_error_details(error_details)
+{
+ SetBackgroundColour(*wxWHITE);
+
+ wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL);
+
+ auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1));
+ m_line_top->SetBackgroundColour(wxColour(166, 169, 170));
+ main_sizer->Add(m_line_top, 0, wxEXPAND, 0);
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(20));
+
+ SetSizer(main_sizer);
+
+ if (mode == Mode::UpdateAvailable) {
+ create_update_available_ui(current_version);
+ } else {
+ create_missing_plugin_ui();
+ }
+ Layout();
+ Fit();
+ CentreOnParent();
+ wxGetApp().UpdateDlgDarkUI(this);
+}
+
+void NetworkPluginDownloadDialog::create_missing_plugin_ui()
+{
+ wxBoxSizer* main_sizer = static_cast(GetSizer());
+
+ auto* desc = new wxStaticText(this, wxID_ANY,
+ m_mode == Mode::CorruptedPlugin ?
+ _L("The Bambu Network Plugin is corrupted or incompatible. Please reinstall it.") :
+ _L("The Bambu Network Plugin is required for cloud features, printer discovery, and remote printing."));
+ desc->SetFont(::Label::Body_13);
+ desc->Wrap(FromDIP(400));
+ main_sizer->Add(desc, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(15));
+
+ if (!m_error_message.empty()) {
+ auto* error_label = new wxStaticText(this, wxID_ANY,
+ wxString::Format(_L("Error: %s"), wxString::FromUTF8(m_error_message)));
+ error_label->SetFont(::Label::Body_13);
+ error_label->SetForegroundColour(wxColour(208, 93, 93));
+ error_label->Wrap(FromDIP(400));
+ main_sizer->Add(error_label, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
+
+ if (!m_error_details.empty()) {
+ m_details_pane = new wxCollapsiblePane(this, wxID_ANY, _L("Show details"));
+ auto* pane = m_details_pane->GetPane();
+ auto* pane_sizer = new wxBoxSizer(wxVERTICAL);
+
+ auto* details_text = new wxStaticText(pane, wxID_ANY, wxString::FromUTF8(m_error_details));
+ details_text->SetFont(wxGetApp().code_font());
+ details_text->Wrap(FromDIP(380));
+ pane_sizer->Add(details_text, 0, wxALL, FromDIP(10));
+
+ pane->SetSizer(pane_sizer);
+ main_sizer->Add(m_details_pane, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
+ }
+ }
+
+ auto* version_label = new wxStaticText(this, wxID_ANY, _L("Version to install:"));
+ version_label->SetFont(::Label::Body_13);
+ main_sizer->Add(version_label, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(5));
+
+ setup_version_selector();
+ main_sizer->Add(m_version_combo, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(20));
+
+ auto* btn_sizer = new wxBoxSizer(wxHORIZONTAL);
+ btn_sizer->Add(0, 0, 1, wxEXPAND, 0);
+
+ StateColor btn_bg_green(
+ std::pair(wxColour(0, 137, 123), StateColor::Pressed),
+ std::pair(wxColour(38, 166, 154), StateColor::Hovered),
+ std::pair(wxColour(0, 150, 136), StateColor::Normal));
+
+ StateColor btn_bg_white(
+ std::pair(wxColour(206, 206, 206), StateColor::Pressed),
+ std::pair(wxColour(238, 238, 238), StateColor::Hovered),
+ std::pair(*wxWHITE, StateColor::Normal));
+
+ auto* btn_download = new Button(this, _L("Download and Install"));
+ btn_download->SetBackgroundColor(btn_bg_green);
+ btn_download->SetBorderColor(*wxWHITE);
+ btn_download->SetTextColor(*wxWHITE);
+ btn_download->SetFont(::Label::Body_12);
+ btn_download->SetMinSize(wxSize(FromDIP(120), FromDIP(24)));
+ btn_download->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_download, this);
+ btn_sizer->Add(btn_download, 0, wxRIGHT, FromDIP(10));
+
+ auto* btn_skip = new Button(this, _L("Skip for Now"));
+ btn_skip->SetBackgroundColor(btn_bg_white);
+ btn_skip->SetBorderColor(wxColour(38, 46, 48));
+ btn_skip->SetFont(::Label::Body_12);
+ btn_skip->SetMinSize(wxSize(FromDIP(100), FromDIP(24)));
+ btn_skip->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_skip, this);
+ btn_sizer->Add(btn_skip, 0, wxRIGHT, FromDIP(10));
+
+ main_sizer->Add(btn_sizer, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20));
+ main_sizer->Add(0, 0, 0, wxBOTTOM, FromDIP(20));
+}
+
+void NetworkPluginDownloadDialog::create_update_available_ui(const std::string& current_version)
+{
+ wxBoxSizer* main_sizer = static_cast(GetSizer());
+
+ auto* desc = new wxStaticText(this, wxID_ANY,
+ _L("A new version of the Bambu Network Plugin is available."));
+ desc->SetFont(::Label::Body_13);
+ desc->Wrap(FromDIP(400));
+ main_sizer->Add(desc, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(15));
+
+ auto* version_text = new wxStaticText(this, wxID_ANY,
+ wxString::Format(_L("Current version: %s"), wxString::FromUTF8(current_version)));
+ version_text->SetFont(::Label::Body_13);
+ main_sizer->Add(version_text, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
+
+ auto* update_label = new wxStaticText(this, wxID_ANY, _L("Update to version:"));
+ update_label->SetFont(::Label::Body_13);
+ main_sizer->Add(update_label, 0, wxLEFT | wxRIGHT, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(5));
+
+ setup_version_selector();
+ main_sizer->Add(m_version_combo, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(25));
+ main_sizer->Add(0, 0, 0, wxTOP, FromDIP(20));
+
+ auto* btn_sizer = new wxBoxSizer(wxHORIZONTAL);
+ btn_sizer->Add(0, 0, 1, wxEXPAND, 0);
+
+ StateColor btn_bg_green(
+ std::pair(wxColour(0, 137, 123), StateColor::Pressed),
+ std::pair(wxColour(38, 166, 154), StateColor::Hovered),
+ std::pair(wxColour(0, 150, 136), StateColor::Normal));
+
+ StateColor btn_bg_white(
+ std::pair(wxColour(206, 206, 206), StateColor::Pressed),
+ std::pair(wxColour(238, 238, 238), StateColor::Hovered),
+ std::pair(*wxWHITE, StateColor::Normal));
+
+ auto* btn_download = new Button(this, _L("Update Now"));
+ btn_download->SetBackgroundColor(btn_bg_green);
+ btn_download->SetBorderColor(*wxWHITE);
+ btn_download->SetTextColor(*wxWHITE);
+ btn_download->SetFont(::Label::Body_12);
+ btn_download->SetMinSize(wxSize(FromDIP(100), FromDIP(24)));
+ btn_download->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_download, this);
+ btn_sizer->Add(btn_download, 0, wxRIGHT, FromDIP(10));
+
+ auto* btn_remind = new Button(this, _L("Remind Later"));
+ btn_remind->SetBackgroundColor(btn_bg_white);
+ btn_remind->SetBorderColor(wxColour(38, 46, 48));
+ btn_remind->SetFont(::Label::Body_12);
+ btn_remind->SetMinSize(wxSize(FromDIP(100), FromDIP(24)));
+ btn_remind->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_remind_later, this);
+ btn_sizer->Add(btn_remind, 0, wxRIGHT, FromDIP(10));
+
+ auto* btn_skip = new Button(this, _L("Skip Version"));
+ btn_skip->SetBackgroundColor(btn_bg_white);
+ btn_skip->SetBorderColor(wxColour(38, 46, 48));
+ btn_skip->SetFont(::Label::Body_12);
+ btn_skip->SetMinSize(wxSize(FromDIP(100), FromDIP(24)));
+ btn_skip->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_skip_version, this);
+ btn_sizer->Add(btn_skip, 0, wxRIGHT, FromDIP(10));
+
+ auto* btn_dont_ask = new Button(this, _L("Don't Ask Again"));
+ btn_dont_ask->SetBackgroundColor(btn_bg_white);
+ btn_dont_ask->SetBorderColor(wxColour(38, 46, 48));
+ btn_dont_ask->SetFont(::Label::Body_12);
+ btn_dont_ask->SetMinSize(wxSize(FromDIP(110), FromDIP(24)));
+ btn_dont_ask->Bind(wxEVT_BUTTON, &NetworkPluginDownloadDialog::on_dont_ask, this);
+ btn_sizer->Add(btn_dont_ask, 0, wxRIGHT, FromDIP(10));
+
+ main_sizer->Add(btn_sizer, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20));
+ main_sizer->Add(0, 0, 0, wxBOTTOM, FromDIP(20));
+}
+
+void NetworkPluginDownloadDialog::setup_version_selector()
+{
+ m_version_combo = new ComboBox(this, wxID_ANY, wxEmptyString,
+ wxDefaultPosition, wxSize(FromDIP(380), FromDIP(28)), 0, nullptr, wxCB_READONLY);
+ m_version_combo->SetFont(::Label::Body_13);
+
+ m_available_versions = BBL::get_all_available_versions();
+ for (size_t i = 0; i < m_available_versions.size(); ++i) {
+ const auto& ver = m_available_versions[i];
+ wxString label;
+ if (!ver.suffix.empty()) {
+ label = wxString::FromUTF8("\xE2\x94\x94 ") + wxString::FromUTF8(ver.display_name);
+ } else {
+ label = wxString::FromUTF8(ver.display_name);
+ if (ver.is_latest) {
+ label += wxString(" ") + _L("(Latest)");
+ }
+ }
+ m_version_combo->Append(label);
+ }
+
+ m_version_combo->SetSelection(0);
+}
+
+std::string NetworkPluginDownloadDialog::get_selected_version() const
+{
+ if (!m_version_combo) {
+ return "";
+ }
+
+ int selection = m_version_combo->GetSelection();
+ if (selection < 0 || selection >= static_cast(m_available_versions.size())) {
+ return "";
+ }
+
+ return m_available_versions[selection].version;
+}
+
+void NetworkPluginDownloadDialog::on_download(wxCommandEvent& evt)
+{
+ int selection = m_version_combo ? m_version_combo->GetSelection() : 0;
+ if (selection >= 0 && selection < static_cast