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 01037f6e2f..11d1148dce 100644
--- a/.github/workflows/build_all.yml
+++ b/.github/workflows/build_all.yml
@@ -82,113 +82,109 @@ jobs:
build-deps-only: ${{ inputs.build-deps-only || false }}
force-build: ${{ github.event_name == 'schedule' }}
secrets: inherit
-
- # TODO: Re-enable after auto-update testing is complete (depends on build_linux)
- # unit_tests:
- # name: Unit Tests
- # runs-on: ubuntu-24.04
- # needs: build_linux
- # if: ${{ !cancelled() && success() }}
- # steps:
- # - name: Checkout
- # uses: actions/checkout@v6
- # with:
- # sparse-checkout: |
- # .github
- # scripts
- # tests
- # - name: Apt-Install Dependencies
- # uses: ./.github/actions/apt-install-deps
- # - name: Restore Test Artifact
- # uses: actions/download-artifact@v6
- # with:
- # name: ${{ github.sha }}-tests
- # - uses: lukka/get-cmake@latest
- # with:
- # cmakeVersion: "~3.28.0" # use most recent 3.28.x version
- # - name: Unpackage and Run Unit Tests
- # timeout-minutes: 20
- # run: |
- # tar -xvf build_tests.tar
- # scripts/run_unit_tests.sh
- # - name: Upload Test Logs
- # uses: actions/upload-artifact@v5
- # if: ${{ failure() }}
- # with:
- # name: unit-test-logs
- # path: build/tests/**/*.log
- # - name: Publish Test Results
- # if: always()
- # uses: EnricoMi/publish-unit-test-result-action/linux@v2
- # with:
- # files: "ctest_results.xml"
-
- # TODO: Re-enable after auto-update testing is complete
- # flatpak:
- # name: "Flatpak"
- # container:
- # image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48
- # options: --privileged
- # volumes:
- # - /usr/local/lib/android:/usr/local/lib/android
- # - /usr/share/dotnet:/usr/share/dotnet
- # - /opt/ghc:/opt/ghc1
- # - /usr/local/share/boost:/usr/local/share/boost1
- # - /opt/hostedtoolcache:/opt/hostedtoolcache1
- # strategy:
- # fail-fast: false
- # matrix:
- # variant:
- # - arch: x86_64
- # runner: ubuntu-24.04
- # - arch: aarch64
- # runner: ubuntu-24.04-arm
- # # Don't run scheduled builds on forks:
- # if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
- # runs-on: ${{ matrix.variant.runner }}
- # env:
- # date:
- # ver:
- # ver_pure:
- # steps:
- # - name: "Remove unneeded stuff to free disk space"
- # run:
- # rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/*
- # - uses: actions/checkout@v6
- # - name: Get the version and date
- # run: |
- # ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2)
- # if [[ "${{ github.event_name }}" == "pull_request" ]]; then
- # ver="PR-${{ github.event.number }}"
- # git_commit_hash="${{ github.event.pull_request.head.sha }}"
- # else
- # ver=V$ver_pure
- # git_commit_hash=""
- # fi
- # echo "ver=$ver" >> $GITHUB_ENV
- # echo "ver_pure=$ver_pure" >> $GITHUB_ENV
- # echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
- # echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV
- # shell: bash
- # - uses: flatpak/flatpak-github-actions/flatpak-builder@master
- # with:
- # bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
- # manifest-path: scripts/flatpak/io.github.softfever.OrcaSlicer.yml
- # cache: true
- # arch: ${{ matrix.variant.arch }}
- # upload-artifact: false
- # - name: Upload artifacts Flatpak
- # uses: actions/upload-artifact@v5
- # with:
- # name: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
- # path: '/__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak'
- # - name: Deploy Flatpak to nightly release
- # if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main'
- # uses: WebFreak001/deploy-nightly@v3.2.0
- # with:
- # upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label}
- # release_id: 137995723
- # asset_path: /__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
- # asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak
- # asset_content_type: application/octet-stream
- # max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted
+ unit_tests:
+ name: Unit Tests
+ runs-on: ubuntu-24.04
+ needs: build_linux
+ if: ${{ !cancelled() && success() }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ sparse-checkout: |
+ .github
+ scripts
+ tests
+ - name: Apt-Install Dependencies
+ uses: ./.github/actions/apt-install-deps
+ - name: Restore Test Artifact
+ uses: actions/download-artifact@v7
+ with:
+ name: ${{ github.sha }}-tests
+ - uses: lukka/get-cmake@latest
+ with:
+ cmakeVersion: "~3.28.0" # use most recent 3.28.x version
+ - name: Unpackage and Run Unit Tests
+ timeout-minutes: 20
+ run: |
+ tar -xvf build_tests.tar
+ scripts/run_unit_tests.sh
+ - name: Upload Test Logs
+ uses: actions/upload-artifact@v6
+ if: ${{ failure() }}
+ with:
+ name: unit-test-logs
+ path: build/tests/**/*.log
+ - name: Publish Test Results
+ if: always()
+ uses: EnricoMi/publish-unit-test-result-action/linux@v2
+ with:
+ files: "ctest_results.xml"
+ flatpak:
+ name: "Flatpak"
+ container:
+ image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48
+ options: --privileged
+ volumes:
+ - /usr/local/lib/android:/usr/local/lib/android
+ - /usr/share/dotnet:/usr/share/dotnet
+ - /opt/ghc:/opt/ghc1
+ - /usr/local/share/boost:/usr/local/share/boost1
+ - /opt/hostedtoolcache:/opt/hostedtoolcache1
+ strategy:
+ fail-fast: false
+ matrix:
+ variant:
+ - arch: x86_64
+ runner: ubuntu-24.04
+ - arch: aarch64
+ runner: ubuntu-24.04-arm
+ # Don't run scheduled builds on forks:
+ if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
+ runs-on: ${{ matrix.variant.runner }}
+ env:
+ date:
+ ver:
+ ver_pure:
+ steps:
+ - name: "Remove unneeded stuff to free disk space"
+ run:
+ rm -rf /usr/local/lib/android/* /usr/share/dotnet/* /opt/ghc1/* "/usr/local/share/boost1/*" /opt/hostedtoolcache1/*
+ - uses: actions/checkout@v6
+ - name: Get the version and date
+ run: |
+ ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2)
+ if [[ "${{ github.event_name }}" == "pull_request" ]]; then
+ ver="PR-${{ github.event.number }}"
+ git_commit_hash="${{ github.event.pull_request.head.sha }}"
+ else
+ ver=V$ver_pure
+ git_commit_hash=""
+ fi
+ echo "ver=$ver" >> $GITHUB_ENV
+ echo "ver_pure=$ver_pure" >> $GITHUB_ENV
+ echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
+ echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV
+ shell: bash
+ - uses: flatpak/flatpak-github-actions/flatpak-builder@master
+ with:
+ bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
+ manifest-path: scripts/flatpak/io.github.softfever.OrcaSlicer.yml
+ cache: true
+ arch: ${{ matrix.variant.arch }}
+ upload-artifact: false
+ - name: Upload artifacts Flatpak
+ 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'
+ - name: Deploy Flatpak to nightly release
+ if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main'
+ uses: WebFreak001/deploy-nightly@v3.2.0
+ with:
+ upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label}
+ release_id: 137995723
+ asset_path: /__w/OrcaSlicer/OrcaSlicer/OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak
+ asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak
+ asset_content_type: application/octet-stream
+ max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted
diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml
index 045f9f7f2a..c6288330a1 100644
--- a/.github/workflows/build_deps.yml
+++ b/.github/workflows/build_deps.yml
@@ -35,7 +35,7 @@ jobs:
# So building XOR cache loading.
# We use `lookup-only` to skip pulling cache.
- name: load cached deps
- uses: actions/cache/restore@v4
+ uses: actions/cache/restore@v5
id: cache-load
with:
path: ${{ env.DEPS_PATH }}
@@ -97,7 +97,7 @@ jobs:
- name: Upload OrcaSlicer_dep director(ies) for use later
if: ${{ !cancelled() && ! env.ACT}}
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v6
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ env.DEPS_PATH }}
@@ -106,7 +106,7 @@ jobs:
- name: Save cache from main branch
if: ${{ !cancelled() && github.ref == 'refs/heads/main' && steps.cache-load.outputs.cache-hit != 'true' }}
- uses: actions/cache/save@v4
+ uses: actions/cache/save@v5
with:
path: ${{ env.DEPS_PATH }}
key: ${{ steps.cache-load.outputs.cache-primary-key }}
diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml
index 65811b8629..3706eace8a 100644
--- a/.github/workflows/build_orca.yml
+++ b/.github/workflows/build_orca.yml
@@ -31,7 +31,7 @@ jobs:
lfs: 'true'
- name: Download deps artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path }}
@@ -225,7 +225,7 @@ 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
@@ -240,7 +240,7 @@ jobs:
- 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
@@ -307,28 +307,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
@@ -388,7 +388,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
@@ -410,7 +410,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'
@@ -419,7 +419,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/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/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/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/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/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/M3D Enabler D8500 MM Model_cover.png b/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png
index eb067195cf..50020d51b7 100644
Binary files a/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png and b/resources/profiles/M3D/M3D Enabler D8500 MM Model_cover.png differ
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/machine/OpenEYE Peacock V2 0.4 nozzle.json b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json
index 4528b72fe1..2912a51b45 100644
--- a/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json
+++ b/resources/profiles/OpenEYE/machine/OpenEYE Peacock V2 0.4 nozzle.json
@@ -4,6 +4,9 @@
"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",
@@ -24,8 +27,8 @@
"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}\"\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",
+ "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"
@@ -45,4 +48,4 @@
],
"setting_id": "GM001",
"type": "machine"
-}
\ 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
index 130e3b189f..a428532958 100644
--- a/resources/profiles/OpenEYE/machine/fdm_openeye_common.json
+++ b/resources/profiles/OpenEYE/machine/fdm_openeye_common.json
@@ -124,8 +124,8 @@
"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}\"\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_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": [
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/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/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/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp
index 9f7687d2c6..bd413d3782 100644
--- a/src/libslic3r/GCode/GCodeProcessor.cpp
+++ b/src/libslic3r/GCode/GCodeProcessor.cpp
@@ -1846,7 +1846,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/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 6d68437cd0..b2e072ff50 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -494,6 +494,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
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/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/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp
index 1c4f7a9bfb..5f3624c469 100644
--- a/src/slic3r/GUI/DownloadProgressDialog.cpp
+++ b/src/slic3r/GUI/DownloadProgressDialog.cpp
@@ -23,6 +23,8 @@
#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 +74,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 +96,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);
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/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 36db1003dc..c826840055 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -2087,7 +2087,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;
}
@@ -3435,7 +3441,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();
@@ -3450,10 +3456,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();
@@ -3467,7 +3474,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
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index fbf61a5084..e8b696f7d3 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -406,8 +406,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; }
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 1e4406bdb7..e7f8161289 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -3118,7 +3118,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";
@@ -3234,7 +3234,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/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/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp
index 9abf49323a..c9bb132f68 100644
--- a/src/slic3r/GUI/NotificationManager.hpp
+++ b/src/slic3r/GUI/NotificationManager.hpp
@@ -980,7 +980,7 @@ private:
NotificationData{NotificationType::BBLUserPresetExceedLimit, NotificationLevel::WarningNotificationLevel, BBL_NOTICE_MAX_INTERVAL,
_u8L("The number of user presets cached in the cloud has exceeded the upper limit, newly created user presets can only be used locally."),
- _u8L("Wiki"),
+ _u8L("Wiki Guide"),
[](wxEvtHandler* evnthndlr) {
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/software/bambu-studio/3rd-party-printer-profile#cloud-user-presets-limit");
return false;
diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp
index 6d3b277c03..7575777507 100644
--- a/src/slic3r/GUI/ObjColorDialog.cpp
+++ b/src/slic3r/GUI/ObjColorDialog.cpp
@@ -47,14 +47,7 @@ wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags,bool exist_error)
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
if (!exist_error) {
btn_sizer->AddSpacer(FromDIP(25));
- wxStaticText *tips = new wxStaticText(this, wxID_ANY, _L("Open Wiki for more information >"));
- /* wxFont font(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false);
- font.SetUnderlined(true);
- tips->SetFont(font);*/
- auto font = tips->GetFont();
- font.SetUnderlined(true);
- tips->SetFont(font);
- tips->SetForegroundColour(wxColour("#009687"));
+ auto *tips = new HyperLink(this, _L("Wiki Guide")); // ORCA
tips->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
bool is_zh = wxGetApp().app_config->get("language") == "zh_CN";
if (is_zh) {
diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp
index 3d0318f663..5b4f9d3504 100644
--- a/src/slic3r/GUI/OptionsGroup.cpp
+++ b/src/slic3r/GUI/OptionsGroup.cpp
@@ -1312,7 +1312,7 @@ wxString OptionsGroup::get_url(const std::string& path_end)
str = str.Left(pos) + anchor;
}
// Orca: point to sf wiki for seam parameters
- return wxString::Format(L"https://github.com/OrcaSlicer/OrcaSlicer/wiki/%s", from_u8(path_end));
+ return wxString::Format(L"https://www.orcaslicer.com/wiki/%s", from_u8(path_end));
}
diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp
index 02329a36b7..56cc764356 100644
--- a/src/slic3r/GUI/PrintOptionsDialog.cpp
+++ b/src/slic3r/GUI/PrintOptionsDialog.cpp
@@ -1153,11 +1153,8 @@ PrinterPartsDialog::PrinterPartsDialog(wxWindow* parent)
change_nozzle_tips->SetFont(Label::Body_13);
change_nozzle_tips->SetForegroundColour(STATIC_TEXT_CAPTION_COL);
- m_wiki_link = new Label(single_panel, _L("View wiki"));
+ m_wiki_link = new HyperLink(single_panel, _L("Wiki Guide")); // ORCA
m_wiki_link->SetFont(Label::Body_13);
- m_wiki_link->SetForegroundColour(wxColour("#009688"));
- m_wiki_link->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_HAND); });
- m_wiki_link->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_ARROW); });
m_wiki_link->Bind(wxEVT_LEFT_DOWN, &PrinterPartsDialog::OnWikiClicked, this);
h_tips_sizer->Add(change_nozzle_tips, 0, wxLEFT);
@@ -1267,11 +1264,8 @@ PrinterPartsDialog::PrinterPartsDialog(wxWindow* parent)
multiple_change_nozzle_tips->SetFont(Label::Body_13);
multiple_change_nozzle_tips->SetForegroundColour(STATIC_TEXT_CAPTION_COL);
- multiple_wiki_link = new Label(multiple_panel, _L("View wiki"));
+ multiple_wiki_link = new HyperLink(multiple_panel, _L("Wiki Guide")); // ORCA
multiple_wiki_link->SetFont(Label::Body_13);
- multiple_wiki_link->SetForegroundColour(wxColour("#009688"));
- multiple_wiki_link->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_HAND); });
- multiple_wiki_link->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_ARROW); });
multiple_wiki_link->Bind(wxEVT_LEFT_DOWN, &PrinterPartsDialog::OnWikiClicked, this);
wxSizer* multiple_change_tips_sizer = new wxBoxSizer(wxHORIZONTAL);
diff --git a/src/slic3r/GUI/PrintOptionsDialog.hpp b/src/slic3r/GUI/PrintOptionsDialog.hpp
index d555c8237b..9918cfb80e 100644
--- a/src/slic3r/GUI/PrintOptionsDialog.hpp
+++ b/src/slic3r/GUI/PrintOptionsDialog.hpp
@@ -16,6 +16,7 @@
#include "Widgets/CheckBox.hpp"
#include "Widgets/StaticLine.hpp"
#include "Widgets/ComboBox.hpp"
+#include "Widgets/HyperLink.hpp"
// Previous definitions
class SwitchBoard;
@@ -33,7 +34,7 @@ protected:
Label* nozzle_flow_type_label;
ComboBox* nozzle_flow_type_checkbox;
Label *change_nozzle_tips;
- Label* m_wiki_link;
+ HyperLink* m_wiki_link;
Button* m_single_update_nozzle_button;
Button* m_multiple_update_nozzle_button;
@@ -46,7 +47,7 @@ protected:
ComboBox *multiple_right_nozzle_flow_checkbox;
Label *multiple_change_nozzle_tips;
- Label* multiple_wiki_link;
+ HyperLink* multiple_wiki_link;
wxPanel *single_panel;
wxPanel *multiple_panel;
diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp
index 2dd0a7baf2..9b156c5228 100644
--- a/src/slic3r/GUI/ReleaseNote.cpp
+++ b/src/slic3r/GUI/ReleaseNote.cpp
@@ -1510,7 +1510,8 @@ InputIpAddressDialog::InputIpAddressDialog(wxWindow *parent)
m_tip4->SetMinSize(wxSize(FromDIP(355), -1));
m_tip4->SetMaxSize(wxSize(FromDIP(355), -1));
- m_trouble_shoot = new wxHyperlinkCtrl(this, wxID_ANY, "How to trouble shooting", "");
+ // ORCA standardized HyperLink
+ m_trouble_shoot = new HyperLink(this, "How to trouble shooting");
m_img_help = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("input_access_code_x1_en", this, 198), wxDefaultPosition, wxSize(FromDIP(355), -1), 0);
diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp
index 838df0efd5..37b7c58935 100644
--- a/src/slic3r/GUI/ReleaseNote.hpp
+++ b/src/slic3r/GUI/ReleaseNote.hpp
@@ -326,7 +326,7 @@ public:
wxStaticBitmap* m_img_step1{ nullptr };
wxStaticBitmap* m_img_step2{ nullptr };
wxStaticBitmap* m_img_step3{ nullptr };
- wxHyperlinkCtrl* m_trouble_shoot{ nullptr };
+ HyperLink* m_trouble_shoot{ nullptr }; // ORCA
wxTimer* closeTimer{ nullptr };
int closeCount{3};
bool m_show_access_code{ false };
diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp
index 56ecd56ce2..eeb472e98a 100644
--- a/src/slic3r/GUI/SelectMachine.cpp
+++ b/src/slic3r/GUI/SelectMachine.cpp
@@ -688,12 +688,9 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0);
sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0);
-
- m_link_network_state = new wxHyperlinkCtrl(m_sw_print_failed_info, wxID_ANY,_L("Check the status of current system services"),"");
+ // ORCA standardized HyperLink
+ m_link_network_state = new HyperLink(m_sw_print_failed_info, _L("Check the status of current system services"), wxGetApp().link_to_network_check());
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);});
sizer_print_failed_info->Add(m_link_network_state, 0, wxLEFT, 5);
sizer_print_failed_info->Add(sizer_error_code, 0, wxLEFT, 5);
diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp
index 42bf251b7c..302b37b553 100644
--- a/src/slic3r/GUI/SelectMachine.hpp
+++ b/src/slic3r/GUI/SelectMachine.hpp
@@ -42,6 +42,7 @@
#include "Widgets/ComboBox.hpp"
#include "Widgets/ScrolledWindow.hpp"
#include "Widgets/PopupWindow.hpp"
+#include "Widgets/HyperLink.hpp" // ORCA
#include
#include
@@ -371,7 +372,7 @@ protected:
Label* m_st_txt_error_desc{nullptr};
Label* m_st_txt_extra_info{nullptr};
Label* m_ams_backup_tip{nullptr};
- wxHyperlinkCtrl* m_link_network_state{ nullptr };
+ HyperLink* m_link_network_state{ nullptr }; // ORCA
wxSimplebook* m_rename_switch_panel{nullptr};
wxSimplebook* m_simplebook{nullptr};
wxStaticText* m_rename_text{nullptr};
diff --git a/src/slic3r/GUI/SelectMachinePop.cpp b/src/slic3r/GUI/SelectMachinePop.cpp
index aef994d067..ddca6df8a7 100644
--- a/src/slic3r/GUI/SelectMachinePop.cpp
+++ b/src/slic3r/GUI/SelectMachinePop.cpp
@@ -596,8 +596,9 @@ void SelectMachinePopup::update_other_devices()
m_placeholder_panel = new wxWindow(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxSize(-1,FromDIP(26)));
wxBoxSizer* placeholder_sizer = new wxBoxSizer(wxVERTICAL);
- m_hyperlink = new wxHyperlinkCtrl(m_placeholder_panel, wxID_ANY, _L("Can't find my devices?"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
- m_hyperlink->SetNormalColour(StateColor::darkModeColorFor("#009789"));
+ // ORCA standardized HyperLink
+ m_hyperlink = new HyperLink(m_placeholder_panel, _L("Can't find my devices?"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"));
+ m_hyperlink->SetFont(::Label::Body_12);
placeholder_sizer->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
diff --git a/src/slic3r/GUI/SelectMachinePop.hpp b/src/slic3r/GUI/SelectMachinePop.hpp
index d1a34f9b3a..757cb08ed5 100644
--- a/src/slic3r/GUI/SelectMachinePop.hpp
+++ b/src/slic3r/GUI/SelectMachinePop.hpp
@@ -180,7 +180,7 @@ private:
PinCodePanel* m_panel_ping_code{nullptr};
PinCodePanel* m_panel_direct_connection{nullptr};
wxWindow* m_placeholder_panel{nullptr};
- wxHyperlinkCtrl* m_hyperlink{nullptr};
+ HyperLink* m_hyperlink{nullptr}; // ORCA
Label* m_ping_code_text{nullptr};
wxStaticBitmap* m_img_ping_code{nullptr};
wxBoxSizer * m_sizer_body{nullptr};
diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp
index 1060dc253c..3578e4047c 100644
--- a/src/slic3r/GUI/SendMultiMachinePage.cpp
+++ b/src/slic3r/GUI/SendMultiMachinePage.cpp
@@ -801,7 +801,7 @@ bool SendMultiMachinePage::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/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp
index 5f5cf9925e..670a8bcad4 100644
--- a/src/slic3r/GUI/SendToPrinter.cpp
+++ b/src/slic3r/GUI/SendToPrinter.cpp
@@ -446,11 +446,9 @@ SendToPrinterDialog::SendToPrinterDialog(Plater *plater)
sizer_extra_info->Add(st_title_extra_info_doc, 0, wxALL, 0);
sizer_extra_info->Add(m_st_txt_extra_info, 0, wxALL, 0);
- m_link_network_state = new wxHyperlinkCtrl(m_sw_print_failed_info, wxID_ANY,_L("Check the status of current system services"),"");
+ // ORCA standardized HyperLink
+ m_link_network_state = new HyperLink(m_sw_print_failed_info, _L("Check the status of current system services"), wxGetApp().link_to_network_check());
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); });
sizer_print_failed_info->Add(m_link_network_state, 0, wxLEFT, 5);
sizer_print_failed_info->Add(sizer_error_code, 0, wxLEFT, 5);
diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp
index de284e31d6..14493a1f20 100644
--- a/src/slic3r/GUI/SendToPrinter.hpp
+++ b/src/slic3r/GUI/SendToPrinter.hpp
@@ -110,7 +110,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 };
StateColor btn_bg_enable;
wxBoxSizer* rename_sizer_v{ nullptr };
wxBoxSizer* rename_sizer_h{ nullptr };
diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp
index db281a8ebf..196c0ff8e0 100644
--- a/src/slic3r/GUI/StepMeshDialog.cpp
+++ b/src/slic3r/GUI/StepMeshDialog.cpp
@@ -117,14 +117,11 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line
wxBoxSizer* tips_sizer = new wxBoxSizer(wxVERTICAL);
wxStaticText* info = new wxStaticText(this, wxID_ANY, _L("Smaller linear and angular deflections result in higher-quality transformations but increase the processing time."));
info->SetForegroundColour(StateColor::darkModeColorFor(FONT_COLOR));
- wxStaticText *tips = new wxStaticText(this, wxID_ANY, _L("View Wiki for more information"));
- wxFont font(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false);
- font.SetUnderlined(true);
- tips->SetForegroundColour(StateColor::darkModeColorFor(wxColour(0, 151, 137)));
- tips->SetFont(font);
- tips->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) {
- wxLaunchDefaultBrowser("https://github.com/OrcaSlicer/OrcaSlicer/wiki/stl-transformation");
- });
+
+ // ORCA standardized HyperLink
+ HyperLink *tips = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/stl-transformation");
+ tips->SetFont(::Label::Body_12);
+
info->Wrap(FromDIP(400));
tips_sizer->Add(info, 0, wxALIGN_LEFT);
tips_sizer->Add(tips, 0, wxALIGN_LEFT);
diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp
index fba6547f65..2522efbf4f 100644
--- a/src/slic3r/GUI/WebUserLoginDialog.cpp
+++ b/src/slic3r/GUI/WebUserLoginDialog.cpp
@@ -25,6 +25,7 @@
#include
#include
+#include // ORCA
using namespace std;
using namespace nlohmann;
@@ -57,11 +58,12 @@ ZUserLogin::ZUserLogin() : wxDialog((wxWindow *) (wxGetApp().mainframe), wxID_AN
m_message->SetForegroundColour(*wxBLACK);
m_message->Wrap(FromDIP(360));
- auto m_download_hyperlink = new wxHyperlinkCtrl(this, wxID_ANY, _L("Click here to download it."), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
- m_download_hyperlink->Bind(wxEVT_HYPERLINK, [this](wxCommandEvent& event) {
+ // ORCA standardized HyperLink
+ auto m_download_hyperlink = new HyperLink(this, _L("Click here to download it."));
+ m_download_hyperlink->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) {
this->Close();
wxGetApp().ShowDownNetPluginDlg();
- });
+ });
m_sizer_main->Add(m_message, 0, wxALIGN_CENTER | wxALL, FromDIP(15));
m_sizer_main->Add(m_download_hyperlink, 0, wxALIGN_CENTER | wxALL, FromDIP(10));
m_sizer_main->Add(0, 0, 1, wxBOTTOM, 10);
diff --git a/src/slic3r/GUI/Widgets/HyperLink.cpp b/src/slic3r/GUI/Widgets/HyperLink.cpp
new file mode 100644
index 0000000000..7fdb236199
--- /dev/null
+++ b/src/slic3r/GUI/Widgets/HyperLink.cpp
@@ -0,0 +1,49 @@
+#include "HyperLink.hpp"
+#include "Label.hpp"
+
+namespace Slic3r { namespace GUI {
+
+HyperLink::HyperLink(wxWindow* parent, const wxString& label, const wxString& url, long style)
+ : wxStaticText(parent, wxID_ANY, label)
+ , m_url(url)
+ , m_normalColor(wxColour("#009687")) // used slightly different color otherwise automatically uses ColorForDark that not visible enough
+ , m_hoverColor(wxColour("#26A69A"))
+{
+ SetForegroundColour(m_normalColor);
+ HyperLink::SetFont(Label::Head_14);
+ SetCursor(wxCursor(wxCURSOR_HAND));
+
+ if (!m_url.IsEmpty())
+ SetToolTip(m_url);
+
+ Bind(wxEVT_LEFT_DOWN, ([this](wxMouseEvent& e) {
+ if (!m_url.IsEmpty())
+ wxLaunchDefaultBrowser(m_url);
+ }));
+
+ Bind(wxEVT_ENTER_WINDOW, ([this](wxMouseEvent& e) {
+ SetForegroundColour(m_hoverColor);
+ Refresh();
+ }));
+ Bind(wxEVT_LEAVE_WINDOW, ([this](wxMouseEvent& e) {
+ SetForegroundColour(m_normalColor);
+ Refresh();
+ }));
+}
+
+bool HyperLink::SetFont(const wxFont& font)
+{ // ensure it stays underlined
+ wxFont f = font;
+ f.SetUnderlined(true);
+ return wxStaticText::SetFont(f);
+}
+
+void HyperLink::SetURL(const wxString& url)
+{
+ m_url = url;
+ SetToolTip(m_url);
+}
+
+wxString HyperLink::GetURL() const { return m_url; }
+
+}} // namespace Slic3r::GUI
diff --git a/src/slic3r/GUI/Widgets/HyperLink.hpp b/src/slic3r/GUI/Widgets/HyperLink.hpp
new file mode 100644
index 0000000000..48e2245e3b
--- /dev/null
+++ b/src/slic3r/GUI/Widgets/HyperLink.hpp
@@ -0,0 +1,26 @@
+#ifndef slic3r_GUI_HyperLink_hpp_
+#define slic3r_GUI_HyperLink_hpp_
+
+#include
+#include
+
+namespace Slic3r { namespace GUI {
+
+class HyperLink : public wxStaticText
+{
+public:
+ HyperLink(wxWindow* parent, const wxString& label = wxEmptyString, const wxString& url = wxEmptyString, const long style = 0);
+
+ void SetURL(const wxString& url);
+ wxString GetURL() const;
+
+ bool SetFont(const wxFont& font);
+
+private:
+ wxString m_url;
+ wxColour m_normalColor;
+ wxColour m_hoverColor;
+};
+
+}} // namespace Slic3r::GUI
+#endif // !slic3r_GUI_HyperLink_hpp_
diff --git a/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp b/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp
index 93e4596aa5..c8e054593f 100644
--- a/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp
+++ b/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp
@@ -160,7 +160,7 @@ void LabeledStaticBox::DrawBorderAndLabel(wxDC& dc)
wxSize wSz = GetSize();
dc.SetBrush(*wxTRANSPARENT_BRUSH);
- dc.SetPen(wxPen(border_color.colorForStates(state_handler.states()), m_border_width, wxSOLID));
+ dc.SetPen(wxPen(border_color.colorForStates(state_handler.states()), m_border_width, wxPENSTYLE_SOLID));
dc.DrawRoundedRectangle( // Border
std::max(0, m_pos.x),
std::max(0, m_pos.y) + m_label_height * .5,
diff --git a/src/slic3r/GUI/Widgets/SideTools.cpp b/src/slic3r/GUI/Widgets/SideTools.cpp
index 4288647e53..377253e707 100644
--- a/src/slic3r/GUI/Widgets/SideTools.cpp
+++ b/src/slic3r/GUI/Widgets/SideTools.cpp
@@ -274,8 +274,8 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
wxBoxSizer* connection_sizer_V = new wxBoxSizer(wxVERTICAL);
wxBoxSizer* connection_sizer_H = new wxBoxSizer(wxHORIZONTAL);
- m_hyperlink = new wxHyperlinkCtrl(m_connection_info, wxID_ANY, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
- m_hyperlink->SetBackgroundColour(wxColour(255, 111, 0));
+ // ORCA standardized HyperLink
+ m_hyperlink = new HyperLink(m_connection_info, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"));
m_more_err_open = ScalableBitmap(this, "monitir_err_open", 16);
m_more_err_close = ScalableBitmap(this, "monitir_err_close", 16);
@@ -328,13 +328,10 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
wxBoxSizer* sizer_error_desc = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer* sizer_extra_info = new wxBoxSizer(wxHORIZONTAL);
- m_link_network_state = new wxHyperlinkCtrl(m_side_error_panel, wxID_ANY,_L("Check the status of current system services"),"",wxDefaultPosition,wxDefaultSize, wxHL_ALIGN_CENTRE |wxST_ELLIPSIZE_END);
- m_link_network_state->SetMinSize(wxSize(FromDIP(220), -1));
+ // ORCA standardized HyperLink
+ m_link_network_state = new HyperLink(m_side_error_panel, _L("Check the status of current system services"), wxGetApp().link_to_network_check(), wxST_ELLIPSIZE_END);
m_link_network_state->SetMaxSize(wxSize(FromDIP(220), -1));
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); });
auto st_title_error_code = new wxStaticText(m_side_error_panel, wxID_ANY, _L("code"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END);
auto st_title_error_code_doc = new wxStaticText(m_side_error_panel, wxID_ANY, ": ");
diff --git a/src/slic3r/GUI/Widgets/SideTools.hpp b/src/slic3r/GUI/Widgets/SideTools.hpp
index 4f1cf7c667..24cbae4fd2 100644
--- a/src/slic3r/GUI/Widgets/SideTools.hpp
+++ b/src/slic3r/GUI/Widgets/SideTools.hpp
@@ -4,9 +4,9 @@
#include
#include
#include
-#include
#include "Button.hpp"
#include "Label.hpp"
+#include "HyperLink.hpp" // ORCA
#include "../GUI/Tabbook.hpp"
#include "../DeviceManager.hpp"
#include "../wxExtensions.hpp"
@@ -99,13 +99,13 @@ public:
private:
SideToolsPanel* m_side_tools{ nullptr };
Tabbook* m_tabpanel{ nullptr };
- wxHyperlinkCtrl* m_link_network_state{ nullptr };
+ HyperLink* m_link_network_state{ nullptr }; // ORCA
Label* m_st_txt_error_code{ nullptr };
Label* m_st_txt_error_desc{ nullptr };
Label* m_st_txt_extra_info{ nullptr };
wxWindow* m_side_error_panel{ nullptr };
Button* m_connection_info{ nullptr };
- wxHyperlinkCtrl* m_hyperlink{ nullptr };
+ HyperLink* m_hyperlink{ nullptr }; // ORCA
ScalableButton* m_more_button{ nullptr };
ScalableBitmap m_more_err_open;
ScalableBitmap m_more_err_close;
diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp
index 24eb46b4a5..79735f6901 100644
--- a/src/slic3r/GUI/calib_dlg.cpp
+++ b/src/slic3r/GUI/calib_dlg.cpp
@@ -5,6 +5,7 @@
#include
#include "MainFrame.hpp"
#include "Widgets/DialogButtons.hpp"
+#include "Widgets/HyperLink.hpp"
#include
#include
#include "libslic3r/PrintConfig.hpp"
@@ -173,22 +174,14 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater*
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- // Help links
- auto help_sizer = new wxBoxSizer(wxVERTICAL);
- auto help_link_pa = new wxHyperlinkCtrl(this, wxID_ANY, _L("Pressure Advance Guide"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/pressure-advance-calib");
- help_link_pa->SetForegroundColour(wxColour("#1890FF"));
- help_sizer->Add(help_link_pa, 0, wxALL, FromDIP(5));
-
- auto help_link_apa = new wxHyperlinkCtrl(this, wxID_ANY, _L("Adaptive Pressure Advance Guide"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/adaptive-pressure-advance-calib");
- help_link_apa->SetForegroundColour(wxColour("#1890FF"));
- help_sizer->Add(help_link_apa, 0, wxALL, FromDIP(5));
-
- v_sizer->Add(help_sizer, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/pressure-advance-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &PA_Calibration_Dlg::on_start, this);
@@ -399,13 +392,14 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Temperature Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/temp-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/temp-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Temp_Calibration_Dlg::on_start, this);
@@ -578,13 +572,14 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Volumetric Speed Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/volumetric-speed-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/volumetric-speed-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &MaxVolumetricSpeed_Test_Dlg::on_start, this);
@@ -684,13 +679,14 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater)
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: VFA"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/vfa-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/vfa-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &VFA_Test_Dlg::on_start, this);
@@ -791,13 +787,14 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Retraction Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/retraction-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/retraction-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Retraction_Test_Dlg::on_start, this);
@@ -968,13 +965,14 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Input Shaping Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/input-shaping-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/input-shaping-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Input_Shaping_Freq_Test_Dlg::on_start, this);
@@ -1165,13 +1163,14 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Input Shaping Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/input-shaping-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/input-shaping-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Input_Shaping_Damp_Test_Dlg::on_start, this);
@@ -1356,13 +1355,14 @@ Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater*
v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10));
v_sizer->AddSpacer(FromDIP(5));
- auto help_link = new wxHyperlinkCtrl(this, wxID_ANY, _L("Wiki Guide: Cornering Calibration"),
- "https://github.com/OrcaSlicer/OrcaSlicer/wiki/cornering-calib");
- help_link->SetForegroundColour(wxColour("#1890FF"));
- v_sizer->Add(help_link, 0, wxALL, FromDIP(10));
-
auto dlg_btns = new DialogButtons(this, {"OK"});
- v_sizer->Add(dlg_btns , 0, wxEXPAND);
+
+ auto bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
+ auto wiki = new HyperLink(this, _L("Wiki Guide"), "https://www.orcaslicer.com/wiki/cornering-calib");
+ bottom_sizer->Add(wiki, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(20));
+ bottom_sizer->AddStretchSpacer();
+ bottom_sizer->Add(dlg_btns, 0, wxEXPAND);
+ v_sizer->Add(bottom_sizer, 0, wxEXPAND);
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &Cornering_Test_Dlg::on_start, this);