mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-29 13:35:45 +03:00
Compare commits
11 Commits
v2.4.1
...
FullSpectr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daa75b3fa0 | ||
|
|
42b506ad85 | ||
|
|
84c7186674 | ||
|
|
9670da7ddd | ||
|
|
c858360ee6 | ||
|
|
1ecedd3187 | ||
|
|
0346c4931a | ||
|
|
227bdb77da | ||
|
|
2a8782b8f6 | ||
|
|
c0dfe50bc5 | ||
|
|
0e0e34c8b4 |
45
.github/workflows/build_all.yml
vendored
45
.github/workflows/build_all.yml
vendored
@@ -5,7 +5,6 @@ on:
|
||||
branches:
|
||||
- main
|
||||
- release/*
|
||||
- belt-printer
|
||||
paths:
|
||||
- 'deps/**'
|
||||
- 'src/**'
|
||||
@@ -15,8 +14,6 @@ on:
|
||||
- 'resources/**'
|
||||
- ".github/workflows/build_*.yml"
|
||||
- 'scripts/flatpak/**'
|
||||
- 'scripts/msix/**'
|
||||
- 'tests/**'
|
||||
|
||||
pull_request:
|
||||
branches:
|
||||
@@ -30,12 +27,9 @@ on:
|
||||
- 'version.inc'
|
||||
- ".github/workflows/build_*.yml"
|
||||
- 'build_linux.sh'
|
||||
- 'build_release_vs.bat'
|
||||
- 'build_release_vs2022.bat'
|
||||
- 'build_release_macos.sh'
|
||||
- 'scripts/flatpak/**'
|
||||
- 'scripts/msix/**'
|
||||
- 'tests/**'
|
||||
|
||||
|
||||
schedule:
|
||||
@@ -57,42 +51,19 @@ jobs:
|
||||
build_linux:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
# Build both arches on every event (PRs included), through the same
|
||||
# build_check_cache -> build_deps -> build_orca chain (the AppImage).
|
||||
# aarch64 always uses the GitHub-hosted arm runner (there is no arm
|
||||
# self-hosted server). amd64's empty arch is load-bearing: it keeps the
|
||||
# historical 'linux-clang' deps cache key and the unsuffixed asset names.
|
||||
matrix:
|
||||
include:
|
||||
- arch: ""
|
||||
os: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}
|
||||
- arch: "aarch64"
|
||||
os: ubuntu-24.04-arm
|
||||
# Don't run scheduled builds on forks:
|
||||
if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
|
||||
uses: ./.github/workflows/build_check_cache.yml
|
||||
with:
|
||||
os: ${{ matrix.os }}
|
||||
arch: ${{ matrix.arch }}
|
||||
os: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}
|
||||
build-deps-only: ${{ inputs.build-deps-only || false }}
|
||||
secrets: inherit
|
||||
build_windows:
|
||||
name: Build Windows ${{ matrix.arch }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- arch: x64
|
||||
os: windows-latest
|
||||
- arch: arm64
|
||||
os: windows-11-arm
|
||||
# Don't run scheduled builds on forks:
|
||||
if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }}
|
||||
uses: ./.github/workflows/build_check_cache.yml
|
||||
with:
|
||||
# Self-hosted runner is x64-only; ARM64 always uses the GitHub-hosted runner.
|
||||
os: ${{ (matrix.arch == 'x64' && vars.SELF_HOSTED) && 'orca-win-server' || matrix.os }}
|
||||
arch: ${{ matrix.arch }}
|
||||
os: ${{ vars.SELF_HOSTED && 'orca-win-server' || 'windows-latest' }}
|
||||
build-deps-only: ${{ inputs.build-deps-only || false }}
|
||||
force-build: ${{ github.event_name == 'schedule' }}
|
||||
secrets: inherit
|
||||
@@ -124,9 +95,7 @@ jobs:
|
||||
secrets: inherit
|
||||
unit_tests:
|
||||
name: Unit Tests
|
||||
# Tests are built on the aarch64 leg by default (faster GitHub arm runner),
|
||||
# so run them there; self-hosted builds them on the amd64 server instead.
|
||||
runs-on: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04-arm' }}
|
||||
runs-on: ${{ vars.SELF_HOSTED && 'orca-lnx-server' || 'ubuntu-24.04' }}
|
||||
needs: build_linux
|
||||
if: ${{ !cancelled() && success() }}
|
||||
steps:
|
||||
@@ -197,9 +166,6 @@ jobs:
|
||||
date:
|
||||
ver:
|
||||
ver_pure:
|
||||
# Belt-printer nightlies share the main nightly release but carry a `_belt`
|
||||
# suffix so they never overwrite the main assets.
|
||||
nightly_suffix: ${{ github.ref == 'refs/heads/belt-printer' && '_belt' || '' }}
|
||||
steps:
|
||||
- name: "Remove unneeded stuff to free disk space"
|
||||
run:
|
||||
@@ -258,12 +224,13 @@ jobs:
|
||||
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' || github.ref == 'refs/heads/belt-printer')
|
||||
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${{ env.nightly_suffix }}_${{ 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
|
||||
|
||||
|
||||
9
.github/workflows/build_check_cache.yml
vendored
9
.github/workflows/build_check_cache.yml
vendored
@@ -33,12 +33,9 @@ jobs:
|
||||
- name: set outputs
|
||||
id: set_outputs
|
||||
env:
|
||||
# Keep macOS/Windows cache keys architecture-specific. amd64 Linux passes
|
||||
# no arch (key stays 'linux-clang', preserving the existing cache);
|
||||
# aarch64 gets its own 'linux-clang-aarch64' key.
|
||||
cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}', inputs.arch) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }}
|
||||
# ARM64 builds use the build-arm64 tree (see build_release_vs.bat); x64/other use build.
|
||||
dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }}
|
||||
# Keep macOS cache keys and paths architecture-specific.
|
||||
cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && 'windows' || 'linux-clang') }}
|
||||
dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || '/OrcaSlicer_dep' }}
|
||||
output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}}
|
||||
run: |
|
||||
echo cache-key=${{ env.cache-os }}-cache-orcaslicer_deps-build-${{ hashFiles('deps/**') }} >> ${{ env.output-cmd }}
|
||||
|
||||
71
.github/workflows/build_deps.yml
vendored
71
.github/workflows/build_deps.yml
vendored
@@ -45,28 +45,11 @@ jobs:
|
||||
key: ${{ inputs.cache-key }}
|
||||
|
||||
- uses: lukka/get-cmake@latest
|
||||
# The windows-11-arm runner needs CMake <= 3.31 (handled in the next step).
|
||||
if: ${{ !(runner.os == 'Windows' && inputs.arch == 'arm64') }}
|
||||
with:
|
||||
cmakeVersion: "~4.3.0" # use most recent 4.3.x version
|
||||
useLocalCache: true # <--= Use the local cache (default is 'false').
|
||||
useCloudCache: true
|
||||
|
||||
- name: Install CMake 3.31.x (Windows ARM64)
|
||||
# windows-11-arm ships CMake 4.x, which removed pre-3.5 policy
|
||||
# compatibility AND has incomplete ASM_ARMASM linker modules
|
||||
# (breaks Boost.Context on ARM64). Pin to the last 3.x release.
|
||||
if: runner.os == 'Windows' && inputs.arch == 'arm64'
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ver = "3.31.6"
|
||||
$url = "https://github.com/Kitware/CMake/releases/download/v$ver/cmake-$ver-windows-arm64.zip"
|
||||
Invoke-WebRequest -Uri $url -OutFile "$env:RUNNER_TEMP\cmake.zip"
|
||||
Expand-Archive -Path "$env:RUNNER_TEMP\cmake.zip" -DestinationPath "$env:RUNNER_TEMP\cmake" -Force
|
||||
$cmakeBin = "$env:RUNNER_TEMP\cmake\cmake-$ver-windows-arm64\bin"
|
||||
if (-not (Test-Path "$cmakeBin\cmake.exe")) { throw "cmake.exe not found at $cmakeBin" }
|
||||
Add-Content -Path $env:GITHUB_PATH -Value $cmakeBin
|
||||
|
||||
- name: setup dev on Windows
|
||||
if: runner.os == 'Windows'
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
@@ -82,50 +65,6 @@ jobs:
|
||||
shell: pwsh
|
||||
|
||||
|
||||
- name: Install MSYS2 (clangarm64) with GMP/MPFR and LLVM tools
|
||||
if: runner.os == 'Windows' && inputs.arch == 'arm64'
|
||||
uses: msys2/setup-msys2@v2
|
||||
with:
|
||||
msystem: CLANGARM64
|
||||
update: true
|
||||
install: >-
|
||||
mingw-w64-clang-aarch64-gmp
|
||||
mingw-w64-clang-aarch64-mpfr
|
||||
mingw-w64-clang-aarch64-llvm
|
||||
|
||||
- name: Stage ARM64 GMP/MPFR (no prebuilt blobs exist for win-arm64)
|
||||
# GMP/MPFR ship prebuilt x64/x86 blobs in-tree but none for ARM64.
|
||||
# Pull them from MSYS2 clangarm64 and generate MSVC import libs via
|
||||
# llvm-dlltool, then stage into deps/{GMP,MPFR}/.../win-arm64 where the
|
||||
# MSVC branch of GMP.cmake/MPFR.cmake copies them into the dep prefix.
|
||||
if: runner.os == 'Windows' && inputs.arch == 'arm64'
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
BIN=/clangarm64/bin
|
||||
REPO=$(cygpath -u "$GITHUB_WORKSPACE")
|
||||
|
||||
make_import_lib() {
|
||||
local dll="$1"; local lib="$2"; local def="/tmp/${dll%.dll}.def"
|
||||
echo "EXPORTS" > "$def"
|
||||
llvm-readobj --coff-exports "$BIN/$dll" | awk '/Name: /{print $2}' >> "$def"
|
||||
llvm-dlltool -m arm64 -D "$dll" -d "$def" -l "$BIN/$lib"
|
||||
}
|
||||
|
||||
make_import_lib libgmp-10.dll libgmp-10.lib
|
||||
|
||||
# MPFR 4.x ships as libmpfr-6.dll; rename to libmpfr-4 BEFORE generating
|
||||
# the import lib so the baked-in runtime DLL name is correct.
|
||||
MPFR_DLL=$(ls $BIN/libmpfr-*.dll | head -1 | xargs basename)
|
||||
if [ "$MPFR_DLL" != "libmpfr-4.dll" ]; then cp "$BIN/$MPFR_DLL" "$BIN/libmpfr-4.dll"; fi
|
||||
make_import_lib libmpfr-4.dll libmpfr-4.lib
|
||||
|
||||
mkdir -p $REPO/deps/GMP/gmp/lib/win-arm64 $REPO/deps/MPFR/mpfr/lib/win-arm64
|
||||
cp $BIN/libgmp-10.dll $BIN/libgmp-10.lib $REPO/deps/GMP/gmp/lib/win-arm64/
|
||||
cp $BIN/libmpfr-4.dll $BIN/libmpfr-4.lib $REPO/deps/MPFR/mpfr/lib/win-arm64/
|
||||
cp /clangarm64/include/gmp.h $REPO/deps/GMP/gmp/include/
|
||||
cp /clangarm64/include/mpfr.h $REPO/deps/MPFR/mpfr/include/ || true
|
||||
|
||||
# Build Dependencies
|
||||
- name: Build on Windows
|
||||
if: runner.os == 'Windows'
|
||||
@@ -134,14 +73,8 @@ jobs:
|
||||
if (-not "${{ vars.SELF_HOSTED }}") {
|
||||
choco install strawberryperl
|
||||
}
|
||||
$arch = "${{ inputs.arch }}"
|
||||
if ($arch -eq "arm64") {
|
||||
.\build_release_vs.bat deps arm64
|
||||
.\build_release_vs.bat pack arm64
|
||||
} else {
|
||||
.\build_release_vs.bat deps
|
||||
.\build_release_vs.bat pack
|
||||
}
|
||||
.\build_release_vs.bat deps
|
||||
.\build_release_vs.bat pack
|
||||
shell: pwsh
|
||||
|
||||
- name: Build on Mac ${{ inputs.arch }}
|
||||
|
||||
179
.github/workflows/build_orca.yml
vendored
179
.github/workflows/build_orca.yml
vendored
@@ -29,11 +29,6 @@ jobs:
|
||||
ubuntu-ver: '2404'
|
||||
ubuntu-ver-str: '_Ubuntu2404'
|
||||
ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }}
|
||||
# Branches whose builds are published to the nightly release. The
|
||||
# belt-printer branch ships alongside main but its assets carry a `_belt`
|
||||
# suffix (nightly_suffix) so they never overwrite the main nightly assets.
|
||||
deploy_nightly: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/belt-printer' }}
|
||||
nightly_suffix: ${{ github.ref == 'refs/heads/belt-printer' && '_belt' || '' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -50,28 +45,11 @@ jobs:
|
||||
fail-on-cache-miss: true
|
||||
|
||||
- uses: lukka/get-cmake@latest
|
||||
# The windows-11-arm runner needs CMake <= 3.31 (handled in the next step).
|
||||
if: ${{ !(runner.os == 'Windows' && inputs.arch == 'arm64') }}
|
||||
with:
|
||||
cmakeVersion: "~4.3.0" # use most recent 4.3.x version
|
||||
useLocalCache: true # <--= Use the local cache (default is 'false').
|
||||
useCloudCache: true
|
||||
|
||||
- name: Install CMake 3.31.x (Windows ARM64)
|
||||
# windows-11-arm ships CMake 4.x, which removed pre-3.5 policy
|
||||
# compatibility AND has incomplete ASM_ARMASM linker modules
|
||||
# (breaks Boost.Context on ARM64). Pin to the last 3.x release.
|
||||
if: runner.os == 'Windows' && inputs.arch == 'arm64'
|
||||
shell: pwsh
|
||||
run: |
|
||||
$ver = "3.31.6"
|
||||
$url = "https://github.com/Kitware/CMake/releases/download/v$ver/cmake-$ver-windows-arm64.zip"
|
||||
Invoke-WebRequest -Uri $url -OutFile "$env:RUNNER_TEMP\cmake.zip"
|
||||
Expand-Archive -Path "$env:RUNNER_TEMP\cmake.zip" -DestinationPath "$env:RUNNER_TEMP\cmake" -Force
|
||||
$cmakeBin = "$env:RUNNER_TEMP\cmake\cmake-$ver-windows-arm64\bin"
|
||||
if (-not (Test-Path "$cmakeBin\cmake.exe")) { throw "cmake.exe not found at $cmakeBin" }
|
||||
Add-Content -Path $env:GITHUB_PATH -Value $cmakeBin
|
||||
|
||||
- name: Get the version and date on Ubuntu and macOS
|
||||
if: runner.os != 'Windows'
|
||||
run: |
|
||||
@@ -87,11 +65,6 @@ jobs:
|
||||
echo "ver_pure=$ver_pure" >> $GITHUB_ENV
|
||||
echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV
|
||||
# Per-arch Linux AppImage naming: amd64 keeps the historical unsuffixed
|
||||
# name (arch_suffix empty). Unused on macOS/Windows.
|
||||
if [ '${{ inputs.arch }}' = 'aarch64' ]; then
|
||||
echo "arch_suffix=_aarch64" >> $GITHUB_ENV
|
||||
fi
|
||||
shell: bash
|
||||
|
||||
- name: Get the version and date on Windows
|
||||
@@ -180,9 +153,17 @@ jobs:
|
||||
run: |
|
||||
./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a universal -t 10.15
|
||||
|
||||
- name: Delete intermediate per-arch artifacts
|
||||
if: runner.os == 'macOS' && inputs.macos-combine-only
|
||||
uses: geekyeggo/delete-artifact@v6
|
||||
with:
|
||||
name: |
|
||||
OrcaSlicer_Mac_bundle_arm64_${{ github.sha }}
|
||||
OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }}
|
||||
|
||||
# Thanks to RaySajuuk, it's working now
|
||||
- name: Sign app and notary
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/belt-printer' || startsWith(github.ref, 'refs/heads/release/')) && runner.os == 'macOS' && inputs.macos-combine-only
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) && runner.os == 'macOS' && inputs.macos-combine-only
|
||||
working-directory: ${{ github.workspace }}
|
||||
env:
|
||||
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
|
||||
@@ -190,8 +171,6 @@ jobs:
|
||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
||||
CERTIFICATE_ID: ${{ secrets.MACOS_CERTIFICATE_ID }}
|
||||
run: |
|
||||
# Load the `retry` helper (retries flaky commands such as `hdiutil create`).
|
||||
source ${{ github.workspace }}/scripts/retry.sh
|
||||
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
|
||||
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
|
||||
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
|
||||
@@ -214,7 +193,7 @@ jobs:
|
||||
rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/*
|
||||
cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/
|
||||
ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications
|
||||
retry hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
|
||||
# Create separate OrcaSlicer_profile_validator DMG if the app exists
|
||||
@@ -223,7 +202,7 @@ jobs:
|
||||
rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/*
|
||||
cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/
|
||||
ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications
|
||||
retry hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||
hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||
codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||
fi
|
||||
|
||||
@@ -238,16 +217,14 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Create DMG without notary
|
||||
if: github.ref != 'refs/heads/main' && github.ref != 'refs/heads/belt-printer' && runner.os == 'macOS' && inputs.macos-combine-only
|
||||
if: github.ref != 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: |
|
||||
# Load the `retry` helper (retries flaky commands such as `hdiutil create`).
|
||||
source ${{ github.workspace }}/scripts/retry.sh
|
||||
mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg
|
||||
rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/*
|
||||
cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/
|
||||
ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications
|
||||
retry hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
|
||||
# Create separate OrcaSlicer_profile_validator DMG if the app exists
|
||||
if [ -f "${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator" ]; then
|
||||
@@ -255,19 +232,9 @@ jobs:
|
||||
rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/*
|
||||
cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/
|
||||
ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications
|
||||
retry hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||
hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg
|
||||
fi
|
||||
|
||||
# Delete the per-arch bundles only after signing/DMG creation succeeded, so a
|
||||
# failed run keeps them available for a re-run instead of forcing a full rebuild.
|
||||
- name: Delete intermediate per-arch artifacts
|
||||
if: success() && runner.os == 'macOS' && inputs.macos-combine-only
|
||||
uses: geekyeggo/delete-artifact@v6
|
||||
with:
|
||||
name: |
|
||||
OrcaSlicer_Mac_bundle_arm64_${{ github.sha }}
|
||||
OrcaSlicer_Mac_bundle_x86_64_${{ github.sha }}
|
||||
|
||||
- name: Upload artifacts mac
|
||||
if: runner.os == 'macOS' && inputs.macos-combine-only
|
||||
uses: actions/upload-artifact@v7
|
||||
@@ -284,13 +251,13 @@ jobs:
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: Deploy Mac release
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && env.deploy_nightly == 'true' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'macOS' && inputs.macos-combine-only && !vars.SELF_HOSTED
|
||||
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: ${{ github.workspace }}/OrcaSlicer_Mac_universal_${{ env.ver }}.dmg
|
||||
asset_name: OrcaSlicer_Mac_universal_nightly${{ env.nightly_suffix }}.dmg
|
||||
asset_name: OrcaSlicer_Mac_universal_nightly.dmg
|
||||
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
|
||||
|
||||
@@ -306,18 +273,6 @@ jobs:
|
||||
max_releases: 1
|
||||
|
||||
# Windows
|
||||
- name: Set Windows build variables
|
||||
if: runner.os == 'Windows'
|
||||
shell: pwsh
|
||||
run: |
|
||||
if ("${{ inputs.arch }}" -eq "arm64") {
|
||||
"BUILD_DIR=build-arm64" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
|
||||
"ARCH_SUFFIX=_arm64" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
|
||||
} else {
|
||||
"BUILD_DIR=build" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
|
||||
"ARCH_SUFFIX=_x64" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
|
||||
}
|
||||
|
||||
- name: setup MSVC
|
||||
if: runner.os == 'Windows'
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
@@ -335,28 +290,23 @@ jobs:
|
||||
# env:
|
||||
# WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\'
|
||||
# WindowsSDKVersion: '10.0.26100.0\'
|
||||
run: |
|
||||
$arch = "${{ inputs.arch }}"
|
||||
if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 } else { .\build_release_vs.bat slicer }
|
||||
shell: pwsh
|
||||
run: .\build_release_vs.bat slicer
|
||||
|
||||
# NSIS is x86-only; it runs (and the installer it emits runs) under ARM64's
|
||||
# x86 emulation, packaging the native arm64 payload from build-arm64.
|
||||
- name: Create installer Win
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
working-directory: ${{ github.workspace }}/${{ env.BUILD_DIR }}
|
||||
working-directory: ${{ github.workspace }}/build
|
||||
run: |
|
||||
cpack -G NSIS
|
||||
|
||||
- name: Pack app
|
||||
if: runner.os == 'Windows'
|
||||
working-directory: ${{ github.workspace }}/${{ env.BUILD_DIR }}
|
||||
working-directory: ${{ github.workspace }}/build
|
||||
shell: cmd
|
||||
run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_Windows_${{ env.ver }}${{ env.ARCH_SUFFIX }}_portable.zip ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer'
|
||||
run: '"C:/Program Files/7-Zip/7z.exe" a -tzip OrcaSlicer_Windows_${{ env.ver }}_portable.zip ${{ github.workspace }}/build/OrcaSlicer'
|
||||
|
||||
- name: Pack PDB
|
||||
if: runner.os == 'Windows' && inputs.arch != 'arm64' && !vars.SELF_HOSTED
|
||||
working-directory: ${{ github.workspace }}/${{ env.BUILD_DIR }}/src/Release
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
working-directory: ${{ github.workspace }}/build/src/Release
|
||||
shell: cmd
|
||||
run: '"C:/Program Files/7-Zip/7z.exe" a -m0=lzma2 -mx9 Debug_PDB_${{ env.ver }}_for_developers_only.7z *.pdb'
|
||||
|
||||
@@ -364,54 +314,54 @@ jobs:
|
||||
if: runner.os == 'Windows'
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_Windows_${{ env.ver }}${{ env.ARCH_SUFFIX }}_portable
|
||||
path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer
|
||||
name: OrcaSlicer_Windows_${{ env.ver }}_portable
|
||||
path: ${{ github.workspace }}/build/OrcaSlicer
|
||||
|
||||
- name: Upload artifacts Win installer
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_Windows_${{ env.ver }}${{ env.ARCH_SUFFIX }}
|
||||
path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer*.exe
|
||||
name: OrcaSlicer_Windows_${{ env.ver }}
|
||||
path: ${{ github.workspace }}/build/OrcaSlicer*.exe
|
||||
|
||||
- name: Upload artifacts Win PDB
|
||||
if: runner.os == 'Windows' && inputs.arch != 'arm64' && !vars.SELF_HOSTED
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: PDB
|
||||
path: ${{ github.workspace }}/build/src/Release/Debug_PDB_${{ env.ver }}_for_developers_only.7z
|
||||
|
||||
- name: Upload OrcaSlicer_profile_validator Win
|
||||
if: runner.os == 'Windows' && inputs.arch != 'arm64' && !vars.SELF_HOSTED
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_profile_validator_Windows_${{ env.ver }}
|
||||
path: ${{ github.workspace }}/build/src/Release/OrcaSlicer_profile_validator.exe
|
||||
|
||||
- name: Deploy Windows release portable
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && env.deploy_nightly == 'true' && runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
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: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_${{ env.ver }}${{ env.ARCH_SUFFIX }}_portable.zip
|
||||
asset_name: OrcaSlicer_Windows${{ env.ARCH_SUFFIX }}_nightly${{ env.nightly_suffix }}_portable.zip
|
||||
asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_${{ env.ver }}_portable.zip
|
||||
asset_name: OrcaSlicer_Windows_nightly_portable.zip
|
||||
asset_content_type: application/x-zip-compressed
|
||||
max_releases: 1
|
||||
|
||||
- name: Deploy Windows release installer
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && env.deploy_nightly == 'true' && runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
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: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_Installer_${{ env.ver }}${{ env.ARCH_SUFFIX }}.exe
|
||||
asset_name: OrcaSlicer_Windows_Installer${{ env.ARCH_SUFFIX }}_nightly${{ env.nightly_suffix }}.exe
|
||||
asset_path: ${{ github.workspace }}/build/OrcaSlicer_Windows_Installer_${{ env.ver }}.exe
|
||||
asset_name: OrcaSlicer_Windows_Installer_nightly.exe
|
||||
asset_content_type: application/x-msdownload
|
||||
max_releases: 1
|
||||
|
||||
- name: Deploy Windows OrcaSlicer_profile_validator release
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && inputs.arch != 'arm64' && !vars.SELF_HOSTED
|
||||
if: github.repository == 'OrcaSlicer/OrcaSlicer' && github.ref == 'refs/heads/main' && runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
uses: WebFreak001/deploy-nightly@v3.2.0
|
||||
with:
|
||||
upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label}
|
||||
@@ -421,26 +371,6 @@ jobs:
|
||||
asset_content_type: application/x-msdownload
|
||||
max_releases: 1
|
||||
|
||||
- name: Build MSIX Store package Win
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
working-directory: ${{ github.workspace }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
./scripts/msix/build_msix.ps1 `
|
||||
-InstallDir "${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer" `
|
||||
-OutputPath "${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_MSIX_${{ env.ver }}${{ env.ARCH_SUFFIX }}.msix" `
|
||||
-Architecture "${{ inputs.arch }}" `
|
||||
-IdentityName "${{ vars.ORCA_MSIX_IDENTITY_NAME || 'OrcaSlicer.OrcaSlicer' }}" `
|
||||
-Publisher "${{ vars.ORCA_MSIX_PUBLISHER || 'CN=38F7EA55-C73B-4072-B3B2-C8E0EA15BB82' }}" `
|
||||
-PublisherDisplayName "${{ vars.ORCA_MSIX_PUBLISHER_DISPLAY_NAME || 'OrcaSlicer' }}"
|
||||
|
||||
- name: Upload artifacts Win MSIX
|
||||
if: runner.os == 'Windows' && !vars.SELF_HOSTED
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_Windows_MSIX_${{ env.ver }}${{ env.ARCH_SUFFIX }}
|
||||
path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/OrcaSlicer_Windows_MSIX_${{ env.ver }}${{ env.ARCH_SUFFIX }}.msix
|
||||
|
||||
# Ubuntu
|
||||
- name: Apt-Install Dependencies
|
||||
if: runner.os == 'Linux' && !vars.SELF_HOSTED
|
||||
@@ -452,23 +382,16 @@ jobs:
|
||||
if: runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
# Build + tar the unit tests (-t) only on the leg that runs them: the
|
||||
# aarch64 leg by default (faster GitHub arm runner), or amd64 when using
|
||||
# self-hosted runners (no arm self-hosted server). unit_tests downloads
|
||||
# this tarball. The profile validator is built with -s, so amd64 keeps it.
|
||||
tests=${{ (!vars.SELF_HOSTED && inputs.arch == 'aarch64') || (vars.SELF_HOSTED && inputs.arch != 'aarch64') }}
|
||||
if $tests; then flags=-istrlL; else flags=-isrlL; fi
|
||||
./build_linux.sh "$flags"
|
||||
./build_linux.sh -istrlL
|
||||
./scripts/check_appimage_libs.sh ./build/package ./build/package/bin/orca-slicer
|
||||
appimage=./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage
|
||||
mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage "$appimage"
|
||||
chmod +x "$appimage"
|
||||
if $tests; then tar -cvpf build_tests.tar build/tests; fi
|
||||
mv -n ./build/OrcaSlicer_Linux_V${{ env.ver_pure }}.AppImage ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage
|
||||
chmod +x ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage
|
||||
tar -cvpf build_tests.tar build/tests
|
||||
|
||||
# Use tar because upload-artifacts won't always preserve directory structure
|
||||
# and doesn't preserve file permissions
|
||||
- name: Upload Test Artifact
|
||||
if: runner.os == 'Linux' && ((!vars.SELF_HOSTED && inputs.arch == 'aarch64') || (vars.SELF_HOSTED && inputs.arch != 'aarch64'))
|
||||
if: runner.os == 'Linux'
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ github.sha }}-tests
|
||||
@@ -478,7 +401,7 @@ jobs:
|
||||
if-no-files-found: error
|
||||
|
||||
- name: Run external slicer regression tests
|
||||
if: runner.os == 'Linux' && inputs.arch != 'aarch64'
|
||||
if: runner.os == 'Linux'
|
||||
timeout-minutes: 20
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -488,7 +411,7 @@ jobs:
|
||||
python3 "$test_repo_dir/run_test.py" "${{ github.workspace }}/build/package/bin/orca-slicer"
|
||||
|
||||
- name: Build orca_custom_preset_tests
|
||||
if: github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64'
|
||||
if: github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED
|
||||
working-directory: ${{ github.workspace }}/build/src/Release
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -500,28 +423,28 @@ jobs:
|
||||
if: ${{ ! env.ACT && runner.os == 'Linux' }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}${{ env.arch_suffix }}_${{ env.ver }}
|
||||
path: "./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage"
|
||||
name: OrcaSlicer_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
||||
path: './build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage'
|
||||
|
||||
- name: Upload OrcaSlicer_profile_validator Ubuntu
|
||||
if: ${{ ! env.ACT && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }}
|
||||
if: ${{ ! env.ACT && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }}
|
||||
path: './build/src/Release/OrcaSlicer_profile_validator'
|
||||
|
||||
- name: Deploy Ubuntu release
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && env.deploy_nightly == 'true' && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
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: ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_${{ env.ver }}.AppImage
|
||||
asset_name: OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}${{ env.arch_suffix }}_nightly${{ env.nightly_suffix }}.AppImage
|
||||
asset_path: ./build/OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_${{ env.ver }}.AppImage
|
||||
asset_name: OrcaSlicer_Linux_AppImage${{ env.ubuntu-ver-str }}_nightly.AppImage
|
||||
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
|
||||
- name: Deploy Ubuntu release
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }}
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
uses: rickstaa/action-create-tag@v1
|
||||
with:
|
||||
tag: "nightly-builds"
|
||||
@@ -530,7 +453,7 @@ jobs:
|
||||
message: "nightly-builds"
|
||||
|
||||
- name: Deploy Ubuntu OrcaSlicer_profile_validator release
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }}
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
uses: WebFreak001/deploy-nightly@v3.2.0
|
||||
with:
|
||||
upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label}
|
||||
@@ -541,7 +464,7 @@ jobs:
|
||||
max_releases: 1
|
||||
|
||||
- name: Deploy orca_custom_preset_tests
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }}
|
||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED }}
|
||||
uses: WebFreak001/deploy-nightly@v3.2.0
|
||||
with:
|
||||
upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label}
|
||||
|
||||
23
.github/workflows/check_profiles.yml
vendored
23
.github/workflows/check_profiles.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
||||
- name: Download
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: |
|
||||
curl -L -o OrcaSlicer_profile_validator https://github.com/OrcaSlicer/OrcaSlicer/releases/download/nightly-builds/OrcaSlicer_profile_validator_Linux_Ubuntu2404_nightly
|
||||
curl -LJO https://github.com/SoftFever/Orca_tools/releases/download/1/OrcaSlicer_profile_validator
|
||||
chmod +x ./OrcaSlicer_profile_validator
|
||||
|
||||
# validate profiles
|
||||
@@ -49,14 +49,6 @@ jobs:
|
||||
set +e
|
||||
./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 2>&1 | tee ${{ runner.temp }}/validate_system.log
|
||||
exit ${PIPESTATUS[0]}
|
||||
# For now run filament subtype check only for BBL profiles until we fix other vendors' profiles.
|
||||
- name: validate filament subtype check for BBL profiles
|
||||
id: validate_filament_subtypes
|
||||
continue-on-error: true
|
||||
run: |
|
||||
set +e
|
||||
./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 -v BBL -f 2>&1 | tee ${{ runner.temp }}/validate_filament_subtypes.log
|
||||
exit ${PIPESTATUS[0]}
|
||||
|
||||
- name: validate custom presets
|
||||
id: validate_custom
|
||||
@@ -76,7 +68,7 @@ jobs:
|
||||
echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt
|
||||
|
||||
- name: Prepare comment artifact
|
||||
if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
|
||||
if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
|
||||
run: |
|
||||
{
|
||||
# Marker matched by check_profiles_comment.yml to delete prior comments.
|
||||
@@ -102,15 +94,6 @@ jobs:
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [ "${{ steps.validate_filament_subtypes.outcome }}" = "failure" ]; then
|
||||
echo "### BBL Filament Subtype Validation Failed"
|
||||
echo ""
|
||||
echo '```'
|
||||
head -c 30000 ${{ runner.temp }}/validate_filament_subtypes.log || echo "No output captured"
|
||||
echo '```'
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [ "${{ steps.validate_custom.outcome }}" = "failure" ]; then
|
||||
echo "### Custom Preset Validation Failed"
|
||||
echo ""
|
||||
@@ -133,7 +116,7 @@ jobs:
|
||||
retention-days: 1
|
||||
|
||||
- name: Fail if any check failed
|
||||
if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
|
||||
if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }}
|
||||
run: |
|
||||
echo "One or more profile checks failed. See above for details."
|
||||
exit 1
|
||||
|
||||
4
.github/workflows/pr-label-bot.yml
vendored
4
.github/workflows/pr-label-bot.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Ask PR author for label
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
function isPermissionDenied(error) {
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Apply label command from PR author
|
||||
uses: actions/github-script@v9
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
function isPermissionDenied(error) {
|
||||
|
||||
131
.github/workflows/publish_release.yml
vendored
131
.github/workflows/publish_release.yml
vendored
@@ -1,131 +0,0 @@
|
||||
name: Publish to draft release
|
||||
|
||||
# Manually pulls the platform binaries produced by a "Build all" run and uploads
|
||||
# them to an existing DRAFT release. Decoupled from the build so you can test a
|
||||
# build first, then publish exactly that run's artifacts once you're happy.
|
||||
#
|
||||
# Trigger: Actions tab -> "Publish to draft release" -> Run workflow.
|
||||
# Locked to a single person: the first step aborts unless the actor matches the
|
||||
# `RELEASE_PUBLISHER` repo variable (set to "SoftFever"). To allow someone else,
|
||||
# change that variable: gh variable set RELEASE_PUBLISHER --body "<login>".
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
run_id:
|
||||
description: 'Run ID of the "Build all" workflow to pull binaries from (the number in the Actions run URL)'
|
||||
required: true
|
||||
type: string
|
||||
tag:
|
||||
description: 'Tag of the draft release to upload to (e.g. v2.4.0)'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write # upload release assets
|
||||
actions: read # download artifacts from another run
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
name: Publish binaries to draft release
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
RUN_ID: ${{ inputs.run_id }}
|
||||
TAG: ${{ inputs.tag }}
|
||||
steps:
|
||||
- name: Restrict to the release publisher
|
||||
env:
|
||||
PUBLISHER: ${{ vars.RELEASE_PUBLISHER }}
|
||||
run: |
|
||||
if [ -z "$PUBLISHER" ]; then
|
||||
echo "::error::RELEASE_PUBLISHER repo variable is not set."
|
||||
exit 1
|
||||
fi
|
||||
if [ "${{ github.actor }}" != "$PUBLISHER" ]; then
|
||||
echo "::error::Only @$PUBLISHER may run this workflow (you are @${{ github.actor }})."
|
||||
exit 1
|
||||
fi
|
||||
echo "Authorized: @${{ github.actor }}"
|
||||
|
||||
- name: Verify target is a draft release
|
||||
run: |
|
||||
if ! gh release view "$TAG" --repo "$GITHUB_REPOSITORY" --json isDraft >/dev/null 2>&1; then
|
||||
echo "::error::Release '$TAG' not found. Create the draft (with this tag) first."
|
||||
exit 1
|
||||
fi
|
||||
is_draft=$(gh release view "$TAG" --repo "$GITHUB_REPOSITORY" --json isDraft --jq '.isDraft')
|
||||
if [ "$is_draft" != "true" ]; then
|
||||
echo "::error::Release '$TAG' is published, not a draft. Aborting to avoid touching a live release."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Verify source build run
|
||||
run: |
|
||||
info=$(gh run view "$RUN_ID" --repo "$GITHUB_REPOSITORY" --json workflowName,conclusion,headBranch)
|
||||
name=$(echo "$info" | jq -r '.workflowName')
|
||||
conclusion=$(echo "$info" | jq -r '.conclusion')
|
||||
branch=$(echo "$info" | jq -r '.headBranch')
|
||||
echo "Source run #$RUN_ID: '$name' on '$branch' (conclusion: $conclusion)"
|
||||
if [ "$conclusion" != "success" ]; then
|
||||
echo "::warning::Source run did not conclude 'success' ($conclusion). Some assets may be missing."
|
||||
fi
|
||||
|
||||
- name: Download release artifacts from build run
|
||||
run: |
|
||||
# Windows_V* (not Windows_*) keeps the MSIX Store artifact out: it goes to Partner Center, not GitHub releases.
|
||||
gh run download "$RUN_ID" --repo "$GITHUB_REPOSITORY" --dir artifacts \
|
||||
-p 'OrcaSlicer_Windows_V*' \
|
||||
-p 'OrcaSlicer_Mac_universal_*' \
|
||||
-p 'OrcaSlicer_Linux_ubuntu_*' \
|
||||
-p 'OrcaSlicer-Linux-flatpak_*' \
|
||||
-p 'PDB'
|
||||
echo "Downloaded artifact folders:"
|
||||
ls -1 artifacts
|
||||
|
||||
- name: Assemble release assets
|
||||
run: |
|
||||
set -euo pipefail
|
||||
mkdir -p upload
|
||||
|
||||
# gh run download auto-extracts each artifact into a folder, so the inner
|
||||
# binaries are already unzipped. Copy the inner binary for each platform.
|
||||
# -type f is required (some artifact *folders* are named "*.flatpak").
|
||||
|
||||
# Windows installers (x64 + arm64): the .exe inside each installer
|
||||
# artifact, NOT the orca-slicer.exe in the portable app folder. CPack
|
||||
# now bakes the arch into the filename (…_x64.exe / …_arm64.exe), so
|
||||
# copy them straight through.
|
||||
find artifacts -type f -name '*.exe' -path '*OrcaSlicer_Windows_V*' ! -path '*_portable*' -exec cp -v {} upload/ \;
|
||||
# macOS universal DMG (profile-validator DMG isn't downloaded).
|
||||
find artifacts -type f -name '*.dmg' -path '*OrcaSlicer_Mac_universal_*' -exec cp -v {} upload/ \;
|
||||
# Linux AppImage.
|
||||
find artifacts -type f -name '*.AppImage' -exec cp -v {} upload/ \;
|
||||
# Flatpak bundles (x86_64 + aarch64).
|
||||
find artifacts -type f -name '*.flatpak' -exec cp -v {} upload/ \;
|
||||
# Windows debug symbols (PDB archive, for developers).
|
||||
find artifacts -type f -name 'Debug_PDB_*.7z' -exec cp -v {} upload/ \;
|
||||
|
||||
# Portable Windows builds (x64 + arm64) are unzipped folder artifacts;
|
||||
# re-zip each to its released filename (these stay .zip on the release).
|
||||
mapfile -t portable_dirs < <(find artifacts -maxdepth 1 -type d -name 'OrcaSlicer_Windows_*_portable')
|
||||
if [ ${#portable_dirs[@]} -eq 0 ]; then
|
||||
echo "::warning::Windows portable artifact not found."
|
||||
fi
|
||||
for portable_dir in "${portable_dirs[@]}"; do
|
||||
( cd "$portable_dir" && zip -qr "$GITHUB_WORKSPACE/upload/$(basename "$portable_dir").zip" . )
|
||||
echo "Zipped portable -> $(basename "$portable_dir").zip"
|
||||
done
|
||||
|
||||
echo "Assets to upload:"
|
||||
ls -lh upload
|
||||
if [ -z "$(ls -A upload)" ]; then
|
||||
echo "::error::No assets assembled. Check the run_id and that its artifacts haven't expired."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Upload assets to draft release
|
||||
run: |
|
||||
gh release upload "$TAG" upload/* --repo "$GITHUB_REPOSITORY" --clobber
|
||||
echo "Uploaded to draft release: $TAG"
|
||||
gh release view "$TAG" --repo "$GITHUB_REPOSITORY" --json assets --jq '.assets[].name'
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -45,7 +45,4 @@ test.js
|
||||
.clangd
|
||||
internal_docs/
|
||||
*.flatpak
|
||||
/flatpak-repo/
|
||||
# Python bytecode
|
||||
__pycache__/
|
||||
*.pyc
|
||||
/flatpak-repo/
|
||||
@@ -220,9 +220,7 @@ if (MSVC)
|
||||
# /bigobj (Increase Number of Sections in .Obj file)
|
||||
# error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater
|
||||
# Generate symbols at every build target, even for the release.
|
||||
# -Zm520 fixes error C3859 but forces the compiler to pre-allocate that memory for every translation unit regardless
|
||||
# combining /Zi with /FS frees up a significant amount of memory pressure across all parallel compile jobs and makes /MP faster overall.
|
||||
add_compile_options(-bigobj /Zi /FS)
|
||||
add_compile_options(-bigobj -Zm520 /Zi)
|
||||
# Disable STL4007: Many result_type typedefs and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17.
|
||||
#FIXME Remove this line after eigen library adapts to the new C++17 adaptor rules.
|
||||
add_compile_options(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING)
|
||||
@@ -233,11 +231,6 @@ if (MSVC)
|
||||
# Disable warnings on comparison of unsigned and signed
|
||||
# C4018: signed/unsigned mismatch
|
||||
add_compile_options(/wd4018)
|
||||
# Prevent linker restart when TBB (or other deps) built with /GL are linked
|
||||
# Make your full (clean) build slower because it enables link-time code generation across all translation units.
|
||||
# helps incremental builds by preventing the double-link restart from TBB
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG")
|
||||
endif ()
|
||||
|
||||
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15)
|
||||
@@ -934,16 +927,6 @@ set (CPACK_PACKAGE_VERSION_MAJOR "${ORCA_VERSION_MAJOR}")
|
||||
set (CPACK_PACKAGE_VERSION_MINOR "${ORCA_VERSION_MINOR}")
|
||||
set (CPACK_PACKAGE_VERSION_PATCH "${ORCA_VERSION_PATCH}")
|
||||
set (CPACK_PACKAGE_FILE_NAME "OrcaSlicer_Windows_Installer_V${SoftFever_VERSION}")
|
||||
# Suffix the Windows installer with its target arch so the x64 and arm64 builds
|
||||
# produce distinct filenames (matches ARCH_SUFFIX in build_orca.yml). Same
|
||||
# CMAKE_SYSTEM_PROCESSOR mapping used by orcaslicer_copy_dlls() above.
|
||||
if (WIN32)
|
||||
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
|
||||
string (APPEND CPACK_PACKAGE_FILE_NAME "_arm64")
|
||||
else ()
|
||||
string (APPEND CPACK_PACKAGE_FILE_NAME "_x64")
|
||||
endif ()
|
||||
endif ()
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Orca Slicer is an open source slicer for FDM printers")
|
||||
set (CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/OrcaSlicer/OrcaSlicer")
|
||||
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
|
||||
@@ -951,6 +934,9 @@ set (CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/images\\\\OrcaSlicer.ico"
|
||||
set (CPACK_NSIS_MUI_ICON "${CPACK_PACKAGE_ICON}")
|
||||
set (CPACK_NSIS_MUI_UNIICON "${CPACK_PACKAGE_ICON}")
|
||||
set (CPACK_NSIS_INSTALLED_ICON_NAME "$INSTDIR\\\\orca-slicer.exe")
|
||||
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
|
||||
CreateShortCut \\\"$DESKTOP\\\\OrcaSlicer.lnk\\\" \\\"$INSTDIR\\\\orca-slicer.exe\\\"
|
||||
")
|
||||
set (CPACK_PACKAGE_CHECKSUM SHA256)
|
||||
set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY "OrcaSlicer")
|
||||
set (CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
|
||||
|
||||
36
README.md
36
README.md
@@ -15,20 +15,15 @@ Optimize your prints with ultra-fast slicing, intelligent support generation, an
|
||||
# Official links and community
|
||||
|
||||
#### Official Website:
|
||||
|
||||
<a href="https://www.orcaslicer.com/" style="font-size:2em;">OrcaSlicer.com</a>
|
||||
|
||||
#### Github Repository:
|
||||
|
||||
<a href="https://github.com/OrcaSlicer/OrcaSlicer"><img src="https://img.shields.io/badge/OrcaSlicer-181717?style=flat&logo=github&logoColor=white" width="200" alt="GitHub Logo"/> </a>
|
||||
|
||||
#### Follow us:
|
||||
|
||||
<a href="https://twitter.com/real_OrcaSlicer"><img src="https://img.shields.io/badge/real__OrcaSlicer-000000?style=flat&logo=x&logoColor=white" width="200" alt="X Logo"/> </a>
|
||||
<a href="https://www.youtube.com/@OfficialOrcaSlicer"><img src="https://img.shields.io/badge/OfficialOrcaSlicer-FF0000?style=flat&logo=youtube&logoColor=white" width="200" alt="YouTube Logo"/> </a>
|
||||
<a href="https://twitter.com/real_OrcaSlicer"><img src="https://img.shields.io/badge/real__OrcaSlicer-000000?style=flat&logo=x&logoColor=white" width="200" alt="X Logo"/> </a>
|
||||
|
||||
#### Join our Discord community:
|
||||
|
||||
<a href="https://discord.gg/P4VE9UY9gJ"><img src="https://img.shields.io/badge/-Discord-5865F2?style=flat&logo=discord&logoColor=fff" width="200" alt="discord logo"/> </a>
|
||||
|
||||
<table border="2" style="border-color: #ffa500; background-color:rgb(232, 220, 180); color: #856404;">
|
||||
@@ -96,17 +91,17 @@ Explore the latest developments in OrcaSlicer with our nightly builds. Feedback
|
||||
|
||||
Download the **Windows Installer exe** for your preferred version from the [releases page](https://github.com/OrcaSlicer/OrcaSlicer/releases).
|
||||
|
||||
- *For convenience there is also a portable build available.*
|
||||
- *For convenience there is also a portable build available.*
|
||||
<details>
|
||||
<summary>Troubleshooting</summary>
|
||||
|
||||
- *If you have troubles to run the build, you might need to install following runtimes:*
|
||||
- [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/OrcaSlicer/OrcaSlicer/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe)
|
||||
- [Details of this runtime](https://aka.ms/webview2)
|
||||
- [Alternative Download Link Hosted by Microsoft](https://go.microsoft.com/fwlink/p/?LinkId=2124703)
|
||||
- [vcredist2019_x64](https://github.com/OrcaSlicer/OrcaSlicer/releases/download/v1.0.10-sf2/vcredist2019_x64.exe)
|
||||
- [Alternative Download Link Hosted by Microsoft](https://aka.ms/vs/17/release/vc_redist.x64.exe)
|
||||
- This file may already be available on your computer if you've installed visual studio. Check the following location: `%VCINSTALLDIR%Redist\MSVC\v142`
|
||||
- *If you have troubles to run the build, you might need to install following runtimes:*
|
||||
- [MicrosoftEdgeWebView2RuntimeInstallerX64](https://github.com/OrcaSlicer/OrcaSlicer/releases/download/v1.0.10-sf2/MicrosoftEdgeWebView2RuntimeInstallerX64.exe)
|
||||
- [Details of this runtime](https://aka.ms/webview2)
|
||||
- [Alternative Download Link Hosted by Microsoft](https://go.microsoft.com/fwlink/p/?LinkId=2124703)
|
||||
- [vcredist2019_x64](https://github.com/OrcaSlicer/OrcaSlicer/releases/download/v1.0.10-sf2/vcredist2019_x64.exe)
|
||||
- [Alternative Download Link Hosted by Microsoft](https://aka.ms/vs/17/release/vc_redist.x64.exe)
|
||||
- This file may already be available on your computer if you've installed visual studio. Check the following location: `%VCINSTALLDIR%Redist\MSVC\v142`
|
||||
</details>
|
||||
|
||||
Windows Package Manager
|
||||
@@ -142,10 +137,9 @@ winget install --id=SoftFever.OrcaSlicer -e
|
||||

|
||||
</details>
|
||||
|
||||
## Linux
|
||||
## Linux
|
||||
|
||||
### Flathub (Recommended)
|
||||
|
||||
OrcaSlicer is available through FlatHub:
|
||||
|
||||
<a href='https://flathub.org/apps/com.orcaslicer.OrcaSlicer'><img width='240' alt='Download on Flathub' src='https://dl.flathub.org/assets/badges/flathub-badge-en.png'/></a>
|
||||
@@ -160,9 +154,6 @@ flatpak run com.orcaslicer.OrcaSlicer
|
||||
It can also be installed through graphical software managers (KDE Discover, GNOME Software, etc.) when Flathub is enabled. Search for **OrcaSlicer** in your software center.
|
||||
|
||||
### AppImage
|
||||
|
||||
AppImages are published for both **x86_64** and **aarch64** (ARM64). Pick the file matching your CPU — the ARM64 build has `aarch64` in its name (e.g. `OrcaSlicer_Linux_AppImage_Ubuntu2404_aarch64_*.AppImage`).
|
||||
|
||||
1. Download App image from the [releases page](https://github.com/OrcaSlicer/OrcaSlicer/releases).
|
||||
2. Double click the downloaded file to run it.
|
||||
|
||||
@@ -194,7 +185,7 @@ resolution: 0.1
|
||||
Their generous support enables me to purchase filaments and other essential 3D printing materials for the project.
|
||||
Thank you! :)
|
||||
|
||||
## Sponsors
|
||||
## Sponsors:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@@ -217,8 +208,8 @@ Thank you! :)
|
||||
|
||||
## Support me
|
||||
|
||||
<a href="https://github.com/sponsors/SoftFever"><img src="https://img.shields.io/badge/GitHub%20Sponsors-30363D?style=flat&logo=GitHub-Sponsors&logoColor=EA4AAA" height="50"></a>
|
||||
<a href="https://ko-fi.com/G2G5IP3CP"><img src="https://img.shields.io/badge/Support_me_on_Ko--fi-FF5E5B?style=flat&logo=ko-fi&logoColor=white" height="50"></a>
|
||||
<a href="https://github.com/sponsors/SoftFever"><img src="https://img.shields.io/badge/GitHub%20Sponsors-30363D?style=flat&logo=GitHub-Sponsors&logoColor=EA4AAA" height="50"></a>
|
||||
<a href="https://ko-fi.com/G2G5IP3CP"><img src="https://img.shields.io/badge/Support_me_on_Ko--fi-FF5E5B?style=flat&logo=ko-fi&logoColor=white" height="50"></a>
|
||||
<a href="https://paypal.me/softfever3d"><img src="https://img.shields.io/badge/PayPal-003087?style=flat&logo=paypal&logoColor=fff" height="50"></a>
|
||||
|
||||
## Some Background
|
||||
@@ -230,7 +221,6 @@ OrcaSlicer began in that same spirit, drawing from BambuStudio, PrusaSlicer, and
|
||||
The OrcaSlicer logo was designed by community member [Justin Levine](https://github.com/jal-co).
|
||||
|
||||
# License
|
||||
|
||||
- **OrcaSlicer** is licensed under the GNU Affero General Public License, version 3.
|
||||
- The **GNU Affero General Public License**, version 3 ensures that if you use any part of this software in any way (even behind a web server), your software must be released under the same license.
|
||||
- OrcaSlicer includes a **pressure advance calibration pattern test** adapted from Andrew Ellis' generator, which is licensed under GNU General Public License, version 3. Ellis' generator is itself adapted from a generator developed by Sineos for Marlin, which is licensed under GNU General Public License, version 3.
|
||||
|
||||
@@ -504,24 +504,13 @@ if [[ -n "${USE_LLD}" ]] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Auto-detect ccache for faster rebuilds
|
||||
export CMAKE_CCACHE_ARGS=()
|
||||
CMAKE_CCACHE=${CMAKE_CCACHE:-}
|
||||
if [ -n "$CMAKE_CCACHE" ]; then
|
||||
echo "Checking ${CMAKE_CCACHE} environment variable for compiler cache program..."
|
||||
CMAKE_CCACHE=$(command -v "${CMAKE_CCACHE}") || {
|
||||
echo "CMAKE_CCACHE environment variable is set to '${CMAKE_CCACHE}' but it was not found in PATH."
|
||||
CMAKE_CCACHE=""
|
||||
}
|
||||
elif command -v sccache >/dev/null 2>&1 ; then
|
||||
CMAKE_CCACHE=$(command -v sccache)
|
||||
elif command -v ccache >/dev/null 2>&1 ; then
|
||||
CMAKE_CCACHE=$(command -v ccache)
|
||||
fi
|
||||
if [ -n "${CMAKE_CCACHE}" ] ; then
|
||||
echo "${CMAKE_CCACHE} found, enabling compiler caching..."
|
||||
export CMAKE_CCACHE_ARGS=(-DCMAKE_C_COMPILER_LAUNCHER="${CMAKE_CCACHE}" -DCMAKE_CXX_COMPILER_LAUNCHER="${CMAKE_CCACHE}")
|
||||
if command -v ccache >/dev/null 2>&1 ; then
|
||||
echo "ccache found at $(command -v ccache), enabling compiler caching..."
|
||||
export CMAKE_CCACHE_ARGS=(-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache)
|
||||
else
|
||||
echo "Note: ccache or sccache are not found. Install either of them for faster rebuilds."
|
||||
echo "Note: ccache not found. Install ccache for faster rebuilds."
|
||||
fi
|
||||
|
||||
if [[ -n "${BUILD_DEPS}" ]] ; then
|
||||
@@ -536,7 +525,7 @@ if [[ -n "${BUILD_DEPS}" ]] ; then
|
||||
BUILD_ARGS+=(-DCMAKE_BUILD_TYPE="${BUILD_CONFIG}")
|
||||
fi
|
||||
|
||||
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
|
||||
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
|
||||
print_and_run cmake --build deps/$BUILD_DIR -j1
|
||||
fi
|
||||
|
||||
|
||||
@@ -3,17 +3,6 @@
|
||||
set WP=%CD%
|
||||
set _START_TIME=%TIME%
|
||||
|
||||
@REM Default target architecture to the host CPU arch; override by passing
|
||||
@REM "x64" or "arm64" as an argument. PROCESSOR_ARCHITEW6432 covers a 32-bit
|
||||
@REM shell running on a 64-bit OS, where PROCESSOR_ARCHITECTURE reads "x86".
|
||||
set arch=x64
|
||||
if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64
|
||||
if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64
|
||||
if /I "%1"=="arm64" set arch=ARM64
|
||||
if /I "%2"=="arm64" set arch=ARM64
|
||||
if /I "%1"=="x64" set arch=x64
|
||||
if /I "%2"=="x64" set arch=x64
|
||||
|
||||
@REM Check for Ninja Multi-Config option (-x)
|
||||
set USE_NINJA=0
|
||||
for %%a in (%*) do (
|
||||
@@ -79,13 +68,12 @@ echo Using CMake generator: %CMAKE_GENERATOR%
|
||||
|
||||
@REM Pack deps
|
||||
if "%1"=="pack" (
|
||||
setlocal ENABLEDELAYEDEXPANSION
|
||||
setlocal ENABLEDELAYEDEXPANSION
|
||||
cd %WP%/deps/build
|
||||
if "%arch%"=="ARM64" cd %WP%/deps/build-arm64
|
||||
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set build_date=%%c%%b%%a
|
||||
echo packing deps: OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip
|
||||
echo packing deps: OrcaSlicer_dep_win64_!build_date!_vs!VS_VERSION!.zip
|
||||
|
||||
%WP%/tools/7z.exe a OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip OrcaSlicer_dep
|
||||
%WP%/tools/7z.exe a OrcaSlicer_dep_win64_!build_date!_vs!VS_VERSION!.zip OrcaSlicer_dep
|
||||
goto :done
|
||||
)
|
||||
|
||||
@@ -107,10 +95,9 @@ if "%debug%"=="ON" (
|
||||
set build_dir=build
|
||||
)
|
||||
)
|
||||
if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64
|
||||
echo build type set to %build_type%, arch=%arch%
|
||||
echo build type set to %build_type%
|
||||
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
cd deps
|
||||
mkdir %build_dir%
|
||||
cd %build_dir%
|
||||
@@ -129,7 +116,7 @@ if "%USE_NINJA%"=="1" (
|
||||
cmake ../ -G %CMAKE_GENERATOR% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target deps
|
||||
) else (
|
||||
cmake ../ -G %CMAKE_GENERATOR% -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake ../ -G %CMAKE_GENERATOR% -A x64 -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target deps -- -m
|
||||
)
|
||||
@echo off
|
||||
@@ -148,7 +135,7 @@ if "%USE_NINJA%"=="1" (
|
||||
cmake .. -G %CMAKE_GENERATOR% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target ALL_BUILD
|
||||
) else (
|
||||
cmake .. -G %CMAKE_GENERATOR% -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake .. -G %CMAKE_GENERATOR% -A x64 -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target ALL_BUILD -- -m
|
||||
)
|
||||
@echo off
|
||||
|
||||
@@ -15,18 +15,10 @@ if "%1"=="pack" (
|
||||
|
||||
set debug=OFF
|
||||
set debuginfo=OFF
|
||||
@REM Default target architecture to the host CPU arch; override with x64/arm64 arg.
|
||||
set arch=x64
|
||||
if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64
|
||||
if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64
|
||||
if "%1"=="debug" set debug=ON
|
||||
if "%2"=="debug" set debug=ON
|
||||
if "%1"=="debuginfo" set debuginfo=ON
|
||||
if "%2"=="debuginfo" set debuginfo=ON
|
||||
if /I "%1"=="arm64" set arch=ARM64
|
||||
if /I "%2"=="arm64" set arch=ARM64
|
||||
if /I "%1"=="x64" set arch=x64
|
||||
if /I "%2"=="x64" set arch=x64
|
||||
if "%debug%"=="ON" (
|
||||
set build_type=Debug
|
||||
set build_dir=build-dbg
|
||||
@@ -39,8 +31,7 @@ if "%debug%"=="ON" (
|
||||
set build_dir=build
|
||||
)
|
||||
)
|
||||
if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64
|
||||
echo build type set to %build_type%, arch=%arch%
|
||||
echo build type set to %build_type%
|
||||
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
cd deps
|
||||
@@ -57,7 +48,7 @@ echo "building deps.."
|
||||
echo on
|
||||
REM Set minimum CMake policy to avoid <3.5 errors
|
||||
set CMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
cmake ../ -G "Visual Studio 17 2022" -A %arch% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake ../ -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target deps -- -m
|
||||
@echo off
|
||||
|
||||
@@ -71,7 +62,7 @@ cd %build_dir%
|
||||
|
||||
echo on
|
||||
set CMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
cmake .. -G "Visual Studio 17 2022" -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake .. -G "Visual Studio 17 2022" -A x64 -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type%
|
||||
cmake --build . --config %build_type% --target ALL_BUILD -- -m
|
||||
@echo off
|
||||
cd ..
|
||||
|
||||
@@ -124,8 +124,6 @@ endif()
|
||||
|
||||
if("${CMAKE_GENERATOR_PLATFORM}" MATCHES "x64" OR "${CMAKE_GENERATOR}" MATCHES "Win64")
|
||||
set(_arch "x64")
|
||||
elseif("${CMAKE_GENERATOR_PLATFORM}" MATCHES "ARM64")
|
||||
set(_arch "x64") # GLEW ships one header set; ARM64 uses the x64 import path
|
||||
else()
|
||||
set(_arch "Win32")
|
||||
endif()
|
||||
|
||||
15
deps/Boost/Boost.cmake
vendored
15
deps/Boost/Boost.cmake
vendored
@@ -10,20 +10,6 @@ if (APPLE AND CMAKE_OSX_ARCHITECTURES)
|
||||
set(_context_arch_line "-DBOOST_CONTEXT_ARCHITECTURE:STRING=${CMAKE_OSX_ARCHITECTURES}")
|
||||
endif ()
|
||||
|
||||
# Windows ARM64: Boost.Context's default fcontext implementation assembles .asm
|
||||
# via armasm64, which trips a CMake ASM_ARMASM linker-module bug under the VS
|
||||
# generator. The winfib implementation (Windows Fiber API) avoids assembly while
|
||||
# keeping the Boost::context target that Boost.Asio's stackful coroutines need.
|
||||
set(_context_impl_line "")
|
||||
if (MSVC AND "${DEPS_ARCH}" STREQUAL "arm64")
|
||||
set(_context_impl_line "-DBOOST_CONTEXT_IMPLEMENTATION:STRING=winfib")
|
||||
endif ()
|
||||
|
||||
set(_options "")
|
||||
if (MSVC AND DEP_DEBUG)
|
||||
set(_options "FORWARD_CONFIG")
|
||||
endif ()
|
||||
|
||||
orcaslicer_add_cmake_project(Boost
|
||||
URL "https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz"
|
||||
URL_HASH SHA256=4d27e9efed0f6f152dc28db6430b9d3dfb40c0345da7342eaa5a987dde57bd95
|
||||
@@ -36,7 +22,6 @@ orcaslicer_add_cmake_project(Boost
|
||||
-DBOOST_IOSTREAMS_ENABLE_ZSTD:BOOL=OFF
|
||||
"${_context_abi_line}"
|
||||
"${_context_arch_line}"
|
||||
"${_context_impl_line}"
|
||||
)
|
||||
|
||||
set(DEP_Boost_DEPENDS ZLIB)
|
||||
4
deps/CMakeLists.txt
vendored
4
deps/CMakeLists.txt
vendored
@@ -196,8 +196,6 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE)
|
||||
-DCMAKE_DEBUG_POSTFIX:STRING=d
|
||||
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
|
||||
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
|
||||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
|
||||
@@ -243,8 +241,6 @@ else()
|
||||
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
||||
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
||||
-DCMAKE_IGNORE_PREFIX_PATH:STRING=${CMAKE_IGNORE_PREFIX_PATH}
|
||||
-DCMAKE_C_COMPILER_LAUNCHER:STRING=${CMAKE_C_COMPILER_LAUNCHER}
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER:STRING=${CMAKE_CXX_COMPILER_LAUNCHER}
|
||||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||||
${_cmake_osx_arch}
|
||||
"${_configs_line}"
|
||||
|
||||
BIN
deps/GMP/gmp/lib/win-arm64/libgmp-10.dll
vendored
BIN
deps/GMP/gmp/lib/win-arm64/libgmp-10.dll
vendored
Binary file not shown.
BIN
deps/GMP/gmp/lib/win-arm64/libgmp-10.lib
vendored
BIN
deps/GMP/gmp/lib/win-arm64/libgmp-10.lib
vendored
Binary file not shown.
BIN
deps/MPFR/mpfr/lib/win-arm64/libmpfr-4.dll
vendored
BIN
deps/MPFR/mpfr/lib/win-arm64/libmpfr-4.dll
vendored
Binary file not shown.
BIN
deps/MPFR/mpfr/lib/win-arm64/libmpfr-4.lib
vendored
BIN
deps/MPFR/mpfr/lib/win-arm64/libmpfr-4.lib
vendored
Binary file not shown.
4
deps/OpenCV/OpenCV.cmake
vendored
4
deps/OpenCV/OpenCV.cmake
vendored
@@ -1,6 +1,4 @@
|
||||
# Intel IPP / IPP-ICV is x86/x64 only — there is no ARM64 build, so enabling it
|
||||
# leaves ~200 unresolved ippicv* externals at link time on Windows ARM64.
|
||||
if (MSVC AND NOT "${DEPS_ARCH}" STREQUAL "arm64")
|
||||
if (MSVC)
|
||||
set(_use_IPP "-DWITH_IPP=ON")
|
||||
else ()
|
||||
set(_use_IPP "-DWITH_IPP=OFF")
|
||||
|
||||
12
deps/OpenEXR/OpenEXR.cmake
vendored
12
deps/OpenEXR/OpenEXR.cmake
vendored
@@ -32,17 +32,6 @@ else()
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch)
|
||||
elseif (MSVC AND "${DEPS_ARCH}" STREQUAL "arm64")
|
||||
# Windows ARM64: OpenEXR 2.5.5 hard-codes IMF_HAVE_SSE2 for any MSVC
|
||||
# (ImfSimd.h: `_MSC_VER >= 1300`), pulling in <emmintrin.h> (x86-only) -> C1189.
|
||||
# Patch the header to require an x86 target, and force the SSE cache vars off.
|
||||
set(_patch_cmd ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_LIST_DIR}/patch_openexr_arm64.cmake)
|
||||
set(_openexr_arm64_args
|
||||
-DOPENEXR_IMF_HAVE_SSE2:BOOL=OFF
|
||||
-DOPENEXR_IMF_HAVE_SSSE3:BOOL=OFF
|
||||
-DILMBASE_HAVE_SSE:BOOL=OFF
|
||||
-DILMBASE_FORCE_DISABLE_INTEL_SSE:BOOL=ON
|
||||
)
|
||||
else ()
|
||||
set(_patch_cmd "")
|
||||
endif ()
|
||||
@@ -60,7 +49,6 @@ orcaslicer_add_cmake_project(OpenEXR
|
||||
-DPYILMBASE_ENABLE:BOOL=OFF
|
||||
-DOPENEXR_VIEWERS_ENABLE:BOOL=OFF
|
||||
-DOPENEXR_BUILD_UTILS:BOOL=OFF
|
||||
${_openexr_arm64_args}
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
29
deps/OpenEXR/patch_openexr_arm64.cmake
vendored
29
deps/OpenEXR/patch_openexr_arm64.cmake
vendored
@@ -1,29 +0,0 @@
|
||||
# Applied as PATCH_COMMAND for OpenEXR 2.5.5 on Windows ARM64.
|
||||
#
|
||||
# Root cause of the ARM64 build failure: OpenEXR/IlmImf/ImfSimd.h hard-codes
|
||||
# #if defined __SSE2__ || (_MSC_VER >= 1300 && !_M_CEE_PURE)
|
||||
# #define IMF_HAVE_SSE2 1
|
||||
# #endif
|
||||
# The `_MSC_VER >= 1300` arm is true for *every* MSVC, including ARM64, so
|
||||
# IMF_HAVE_SSE2 gets defined and <emmintrin.h> (an x86-only header) is pulled
|
||||
# in -> error C1189. This is a pure-preprocessor decision, so no CMake cache
|
||||
# variable can suppress it. Patch the header to also require an x86 target.
|
||||
|
||||
set(_simd "OpenEXR/IlmImf/ImfSimd.h")
|
||||
if(EXISTS "${_simd}")
|
||||
file(READ "${_simd}" _content)
|
||||
set(_old "#if defined __SSE2__ || (_MSC_VER >= 1300 && !_M_CEE_PURE)")
|
||||
set(_new "#if (defined __SSE2__ || (_MSC_VER >= 1300 && !_M_CEE_PURE)) && (defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__x86_64__))")
|
||||
if(_content MATCHES "_M_IX86")
|
||||
message(STATUS "[ARM64 patch] ImfSimd.h already guarded")
|
||||
else()
|
||||
string(REPLACE "${_old}" "${_new}" _patched "${_content}")
|
||||
if(_patched STREQUAL _content)
|
||||
message(FATAL_ERROR "[ARM64 patch] Failed to match SSE2 guard in ${_simd}")
|
||||
endif()
|
||||
file(WRITE "${_simd}" "${_patched}")
|
||||
message(STATUS "[ARM64 patch] Guarded IMF_HAVE_SSE2 with x86 arch check in ${_simd}")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "[ARM64 patch] Not found: ${_simd}")
|
||||
endif()
|
||||
6
deps/OpenSSL/OpenSSL.cmake
vendored
6
deps/OpenSSL/OpenSSL.cmake
vendored
@@ -6,11 +6,7 @@ if(DEFINED OPENSSL_ARCH)
|
||||
set(_cross_arch ${OPENSSL_ARCH})
|
||||
else()
|
||||
if(WIN32)
|
||||
if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64")
|
||||
set(_cross_arch "VC-WIN64-ARM")
|
||||
else()
|
||||
set(_cross_arch "VC-WIN64A")
|
||||
endif()
|
||||
set(_cross_arch "VC-WIN64A")
|
||||
elseif(APPLE)
|
||||
set(_cross_arch "darwin64-${CMAKE_OSX_ARCHITECTURES}-cc")
|
||||
endif()
|
||||
|
||||
@@ -27,7 +27,6 @@ add_subdirectory(libigl)
|
||||
add_subdirectory(libnest2d)
|
||||
add_subdirectory(mcut)
|
||||
add_subdirectory(md4c)
|
||||
add_subdirectory(mdns)
|
||||
add_subdirectory(miniz)
|
||||
add_subdirectory(minilzo)
|
||||
add_subdirectory(qhull)
|
||||
|
||||
@@ -267,7 +267,7 @@ void ImGui::Text(const char* fmt, ...)
|
||||
void ImGui::TextCentered(const char* text, ...)
|
||||
{
|
||||
va_list vaList;
|
||||
va_start(vaList, text);
|
||||
va_start(vaList,&text);
|
||||
|
||||
float font_size = ImGui::GetFontSize() * strlen(text) / 2;
|
||||
ImGui::SameLine(ImGui::GetCursorPos().x / 2 - font_size + (font_size / 2));
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
project(mdns)
|
||||
|
||||
# Static library wrapping mjansson/mdns (public domain) plus the cxmdns C++
|
||||
# wrapper from CrealityPrint v7.1.1 (AGPL-3.0). See NOTICE.md for attribution.
|
||||
add_library(mdns STATIC
|
||||
mdns.h
|
||||
mdns.c
|
||||
cxmdns.h
|
||||
cxmdns.cpp
|
||||
)
|
||||
|
||||
target_include_directories(mdns SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
if (MSVC)
|
||||
# mjansson/mdns uses GetAdaptersAddresses (Iphlpapi) and Winsock2 (Ws2_32).
|
||||
target_link_libraries(mdns PUBLIC Iphlpapi Ws2_32)
|
||||
endif()
|
||||
@@ -1,39 +0,0 @@
|
||||
# mDNS / DNS-SD library
|
||||
|
||||
The four files in this directory implement mDNS / DNS-SD lookup and are
|
||||
vendored from third-party sources:
|
||||
|
||||
## mdns.h, mdns.c
|
||||
|
||||
mDNS / DNS-SD lookup library by Mattias Jansson. Originally released to
|
||||
the public domain at https://github.com/mjansson/mdns.
|
||||
|
||||
The exact files here were taken from CrealityOfficial/CrealityPrint
|
||||
v7.1.1, which split the upstream header-only library into separate
|
||||
declaration (mdns.h) and implementation (mdns.c) files.
|
||||
|
||||
- Source: https://github.com/mjansson/mdns
|
||||
- License: Public domain (no restrictions on use)
|
||||
|
||||
## cxmdns.h, cxmdns.cpp
|
||||
|
||||
Thin C++ wrapper over mdns.{h,c} that exposes a single function:
|
||||
|
||||
std::vector<machine_info> syncDiscoveryService(
|
||||
const std::vector<std::string>& prefix);
|
||||
|
||||
It sends a DNS-SD meta-discovery query (`_services._dns-sd._udp.local.`),
|
||||
listens for ~5 seconds, and returns `{ip, service_name}` for every
|
||||
service announcement whose name contains any of the given prefixes.
|
||||
|
||||
OrcaSlicer uses this to find Creality K-series printers on the LAN
|
||||
(service-name prefix "Creality"), since K-series firmware announces
|
||||
each printer under a per-device-unique service type
|
||||
`_Creality-<MAC-derived-hex>._udp.local.` that no fixed-name query can
|
||||
target.
|
||||
|
||||
- Source: CrealityOfficial/CrealityPrint v7.1.1
|
||||
`src/slic3r/GUI/print_manage/utils/cxmdns.{h,cpp}`
|
||||
- License: GNU AGPL-3.0 (compatible with OrcaSlicer's AGPL-3.0; see
|
||||
top-level LICENSE.txt)
|
||||
- Imported: 2026-05-19
|
||||
@@ -1,256 +0,0 @@
|
||||
#include"cxmdns.h"
|
||||
#include"mdns.h"
|
||||
#ifdef _WIN32
|
||||
#define _CRT_SECURE_NO_WARNINGS 1
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include<string.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#include <iphlpapi.h>
|
||||
#define sleep(x) Sleep(x * 1000)
|
||||
#else
|
||||
#include <netdb.h>
|
||||
#include <ifaddrs.h>
|
||||
#include <net/if.h>
|
||||
#endif
|
||||
|
||||
// Alias some things to simulate recieving data to fuzz library
|
||||
#if defined(MDNS_FUZZING)
|
||||
#define recvfrom(sock, buffer, capacity, flags, src_addr, addrlen) ((mdns_ssize_t)capacity)
|
||||
#define printf
|
||||
#endif
|
||||
|
||||
#include "mdns.h"
|
||||
|
||||
#if defined(MDNS_FUZZING)
|
||||
#undef recvfrom
|
||||
#endif
|
||||
|
||||
namespace cxnet
|
||||
{
|
||||
template <typename F>
|
||||
mdns_record_callback_fn lambda2function(F lambda)
|
||||
{
|
||||
static auto lambdabak = lambda;
|
||||
return [](int sock, const struct sockaddr* from, size_t addrlen,
|
||||
mdns_entry_type_t entry, uint16_t query_id, uint16_t rtype,
|
||||
uint16_t rclass, uint32_t ttl, const void* data, size_t size,
|
||||
size_t name_offset, size_t name_length, size_t record_offset,
|
||||
size_t record_length, void* user_data)->int {lambdabak(sock, from, addrlen, entry, query_id, rtype, rclass, ttl, data, size, name_offset, name_length, record_offset, record_length, user_data); return 0; };
|
||||
}
|
||||
|
||||
volatile sig_atomic_t running = 1;
|
||||
#ifdef _WIN32
|
||||
BOOL console_handler(DWORD signal) {
|
||||
if (signal == CTRL_C_EVENT) {
|
||||
running = 0;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
void signal_handler(int signal) {
|
||||
running = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void recvMachineInfoFromSocket(int sock, void* buffer, size_t capacity, const std::vector<std::string>& prefix, std::vector<machine_info>& retmachineInfos, int recIndex)
|
||||
{
|
||||
struct sockaddr_in6 addr;
|
||||
struct sockaddr* saddr = (struct sockaddr*)&addr;
|
||||
socklen_t addrlen = sizeof(addr);
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
#ifdef __APPLE__
|
||||
saddr->sa_len = sizeof(addr);
|
||||
#endif
|
||||
mdns_ssize_t ret = recvfrom(sock, (char*)buffer, (mdns_size_t)capacity, 0, saddr, &addrlen);
|
||||
if (ret <= 0)
|
||||
return;
|
||||
|
||||
size_t data_size = (size_t)ret;
|
||||
//size_t records = 0;
|
||||
const uint16_t* data = (uint16_t*)buffer;
|
||||
|
||||
uint16_t query_id = mdns_ntohs(data++);
|
||||
uint16_t flags = mdns_ntohs(data++);
|
||||
uint16_t questions = mdns_ntohs(data++);
|
||||
uint16_t answer_rrs = mdns_ntohs(data++);
|
||||
uint16_t authority_rrs = mdns_ntohs(data++);
|
||||
uint16_t additional_rrs = mdns_ntohs(data++);
|
||||
|
||||
// According to RFC 6762 the query ID MUST match the sent query ID (which is 0 in our case)
|
||||
if (query_id || (flags != 0x8400))
|
||||
return; // Not a reply to our question
|
||||
|
||||
// It seems some implementations do not fill the correct questions field,
|
||||
// so ignore this check for now and only validate answer string
|
||||
// if (questions != 1)
|
||||
// return 0;
|
||||
|
||||
int i;
|
||||
for (i = 0; i < questions; ++i) {
|
||||
size_t offset = MDNS_POINTER_DIFF(data, buffer);
|
||||
size_t verify_offset = 12;
|
||||
// Verify it's our question, _services._dns-sd._udp.local.
|
||||
if (!mdns_string_equal(buffer, data_size, &offset, mdns_services_query,
|
||||
sizeof(mdns_services_query), &verify_offset))
|
||||
return;
|
||||
data = (const uint16_t*)MDNS_POINTER_OFFSET(buffer, offset);
|
||||
|
||||
uint16_t rtype = mdns_ntohs(data++);
|
||||
uint16_t rclass = mdns_ntohs(data++);
|
||||
|
||||
// Make sure we get a reply based on our PTR question for class IN
|
||||
if ((rtype != MDNS_RECORDTYPE_PTR) || ((rclass & 0x7FFF) != MDNS_CLASS_IN))
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < answer_rrs; ++i) {
|
||||
size_t offset = MDNS_POINTER_DIFF(data, buffer);
|
||||
size_t verify_offset = 12;
|
||||
// Verify it's an answer to our question, _services._dns-sd._udp.local.
|
||||
size_t name_offset = offset;
|
||||
int is_answer = mdns_string_equal(buffer, data_size, &offset, mdns_services_query,
|
||||
sizeof(mdns_services_query), &verify_offset);
|
||||
if (!is_answer && !mdns_string_skip(buffer, data_size, &offset))
|
||||
break;
|
||||
size_t name_length = offset - name_offset;
|
||||
if ((offset + 10) > data_size)
|
||||
return;
|
||||
data = (const uint16_t*)MDNS_POINTER_OFFSET(buffer, offset);
|
||||
|
||||
uint16_t rtype = mdns_ntohs(data++);
|
||||
uint16_t rclass = mdns_ntohs(data++);
|
||||
uint32_t ttl = mdns_ntohl(data);
|
||||
data += 2;
|
||||
uint16_t length = mdns_ntohs(data++);
|
||||
if (length > (data_size - offset))
|
||||
return;
|
||||
|
||||
static char addrbuf[64];
|
||||
static char entrybuf[256];
|
||||
static char namebuf[256];
|
||||
|
||||
if (is_answer) {
|
||||
offset = MDNS_POINTER_DIFF(data, buffer);
|
||||
(void)sizeof(sock);
|
||||
(void)sizeof(query_id);
|
||||
(void)sizeof(name_length);
|
||||
//(void)sizeof(0);
|
||||
mdns_string_t fromaddrstr = ip_address_to_string(addrbuf, sizeof(addrbuf), saddr, addrlen);
|
||||
mdns_string_t entrystr =
|
||||
mdns_string_extract(buffer, data_size, &name_offset, entrybuf, sizeof(entrybuf));
|
||||
if (rtype == MDNS_RECORDTYPE_PTR) {
|
||||
mdns_string_t namestr = mdns_record_parse_ptr(buffer, data_size, offset, length,
|
||||
namebuf, sizeof(namebuf));
|
||||
if (!namestr.str || namestr.length == 0) {
|
||||
return;
|
||||
}
|
||||
const std::string answer_name(namestr.str, namestr.length);
|
||||
bool bFound = false;
|
||||
for (const auto& item : prefix)
|
||||
{
|
||||
if (answer_name.find(item) != std::string::npos)
|
||||
bFound = true;
|
||||
}
|
||||
if (!bFound)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
char ip[16] = { 0 };
|
||||
sscanf(fromaddrstr.str, "%[^:]", ip);
|
||||
retmachineInfos.push_back({ ip, answer_name });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<machine_info> syncDiscoveryService(const std::vector<std::string>& prefix)
|
||||
{
|
||||
std::vector<machine_info> retmachineInfos;
|
||||
const char* hostname = "cxslice-host";
|
||||
// Initialize network environment
|
||||
#ifdef _WIN32
|
||||
WORD versionWanted = MAKEWORD(1, 1);
|
||||
WSADATA wsaData;
|
||||
if (WSAStartup(versionWanted, &wsaData)) {
|
||||
printf("Failed to initialize WinSock\n");
|
||||
return retmachineInfos;
|
||||
}
|
||||
char hostname_buffer[256];
|
||||
DWORD hostname_size = (DWORD)sizeof(hostname_buffer);
|
||||
if (GetComputerNameA(hostname_buffer, &hostname_size))
|
||||
hostname = hostname_buffer;
|
||||
SetConsoleCtrlHandler(console_handler, TRUE);
|
||||
#else
|
||||
char hostname_buffer[256];
|
||||
size_t hostname_size = sizeof(hostname_buffer);
|
||||
if (gethostname(hostname_buffer, hostname_size) == 0)
|
||||
hostname = hostname_buffer;
|
||||
signal(SIGINT, signal_handler);
|
||||
#endif
|
||||
int sockets[32];
|
||||
int num_sockets = open_client_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]), 0);
|
||||
if (num_sockets <= 0) {
|
||||
printf("Failed to open any client sockets\n");
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
return retmachineInfos;
|
||||
}
|
||||
printf("Opened %d socket%s for DNS-SD\n", num_sockets, num_sockets > 1 ? "s" : "");
|
||||
printf("Sending DNS-SD discovery\n");
|
||||
for (int isock = 0; isock < num_sockets; ++isock) {
|
||||
if (mdns_discovery_send(sockets[isock]))
|
||||
printf("Failed to send DNS-DS discovery: %s\n", strerror(errno));
|
||||
}
|
||||
size_t capacity = 2048;
|
||||
void* buffer = malloc(capacity);
|
||||
size_t recordNum = 0;
|
||||
void* user_data = 0;
|
||||
|
||||
// This is a simple implementation that loops for 5 seconds or as long as we get replies
|
||||
int res;
|
||||
printf("Reading DNS-SD replies\n");
|
||||
do {
|
||||
struct timeval timeout;
|
||||
timeout.tv_sec = 5;
|
||||
timeout.tv_usec = 0;
|
||||
|
||||
int nfds = 0;
|
||||
fd_set readfs;
|
||||
FD_ZERO(&readfs);
|
||||
for (int isock = 0; isock < num_sockets; ++isock) {
|
||||
if (sockets[isock] >= nfds)
|
||||
nfds = sockets[isock] + 1;
|
||||
FD_SET(sockets[isock], &readfs);
|
||||
}
|
||||
res = select(nfds, &readfs, 0, 0, &timeout);
|
||||
if (res > 0) {
|
||||
for (int isock = 0; isock < num_sockets; ++isock) {
|
||||
if (FD_ISSET(sockets[isock], &readfs)) {
|
||||
// records += mdns_discovery_recv(sockets[isock], buffer, capacity, query_callback,
|
||||
// 0);
|
||||
recvMachineInfoFromSocket(sockets[isock], buffer, capacity, prefix, retmachineInfos, isock);
|
||||
recordNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (res > 0);
|
||||
|
||||
free(buffer);
|
||||
//
|
||||
for (int isock = 0; isock < num_sockets; ++isock)
|
||||
mdns_socket_close(sockets[isock]);
|
||||
printf("Closed socket%s\n", num_sockets ? "s" : "");
|
||||
#ifdef _WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
return std::move(retmachineInfos);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
#ifndef _CX_MDNS_H
|
||||
#define _CX_MDNS_H
|
||||
#include<string>
|
||||
#include<vector>
|
||||
|
||||
namespace cxnet
|
||||
{
|
||||
struct machine_info
|
||||
{
|
||||
std::string machineIp;
|
||||
std::string answer;
|
||||
};
|
||||
|
||||
std::vector<machine_info> syncDiscoveryService(const std::vector<std::string>& prefix);
|
||||
}
|
||||
#endif
|
||||
1263
deps_src/mdns/mdns.c
1263
deps_src/mdns/mdns.c
File diff suppressed because it is too large
Load Diff
1641
deps_src/mdns/mdns.h
1641
deps_src/mdns/mdns.h
File diff suppressed because it is too large
Load Diff
171
doc/MixedFilament.md
Normal file
171
doc/MixedFilament.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# Mixed Filament
|
||||
|
||||
Ported from [OrcaSlicer-FullSpectrum](https://github.com/SoftFever/OrcaSlicer-FullSpectrum)
|
||||
with contributions from Rad, Justin Hayes, Calogero Guagenti, xSil3nt, and ratdoux.
|
||||
|
||||
---
|
||||
|
||||
## User Guide
|
||||
|
||||
### What It Does
|
||||
|
||||
Mixed Filament lets a single virtual filament slot alternate between two
|
||||
physical filaments across layers (or within a layer in Pointillisme mode),
|
||||
producing blended or gradient-like colours on single-extruder printers.
|
||||
|
||||
### Enabling
|
||||
|
||||
1. Load a multi-colour (multi-extruder) profile with at least 2 filaments.
|
||||
2. The **Mixed Filaments** panel appears automatically in the right-hand sidebar
|
||||
when 2 or more filaments are configured.
|
||||
3. Each auto-generated row represents one pair of physical filaments.
|
||||
Toggle a row to enable it; the total filament count grows to include the
|
||||
virtual slot.
|
||||
|
||||
### Sidebar Workflow
|
||||
|
||||
- **Add** — creates a custom row for the same pair or a different ratio.
|
||||
- **Edit** — opens `MixedFilamentConfigPanel` to adjust ratio, pattern,
|
||||
surface offset (bias), and distribution mode.
|
||||
- **Delete** — marks the row deleted; existing painted geometry retains its
|
||||
virtual filament ID until you re-slice or repaint.
|
||||
|
||||
Painting with a virtual filament ID behaves the same as painting with a
|
||||
physical one — use the Multi-Material Painting gizmo and select the virtual
|
||||
slot from the colour palette.
|
||||
|
||||
### Color Match Dialog
|
||||
|
||||
Open via the colour swatch on a mixed row. The dialog (`MixedFilamentColorMatchDialog`)
|
||||
shows a live preview strip of the blended result and lets you adjust ratio
|
||||
until the preview matches your target colour. The preview accounts for
|
||||
surface-offset bias when enabled.
|
||||
|
||||
### Anti-Banding Options
|
||||
|
||||
| Setting | What it does |
|
||||
|---|---|
|
||||
| `mixed_filament_advanced_dithering` | Uses an ordered dither pattern instead of simple A-then-B runs. Reduces stripe visibility on some hue pairs. More experimental than the default. |
|
||||
| `dithering_local_z_mode` | Splits each blended layer into two sub-layers whose heights are proportional to the mix ratio (e.g. 66/33 at 0.12 mm → 0.08 mm + 0.04 mm). Produces the smoothest colour gradients. |
|
||||
| `dithering_local_z_whole_objects` | Extends Local-Z splitting beyond painted masks to cover the entire object cross-section. Useful when mixed walls surround a painted zone. |
|
||||
| `dithering_local_z_direct_multicolor` | For rows with 3 or more physical components, allocates Local-Z sub-layers directly across all components with carry-over error correction instead of collapsing to pair cadence. More toolchanges; less banding. |
|
||||
|
||||
### Gotchas
|
||||
|
||||
- **Single-extruder warning** — Mixed Filament requires a physical toolchange
|
||||
between the two components. On a true single-nozzle printer this means a
|
||||
manual filament swap. Verify your printer profile supports `T0`/`T1` before
|
||||
using mixed slots in a production print.
|
||||
- **Variable-layer interaction** — If Variable Layer Height is enabled, Local-Z
|
||||
sub-layer heights are recomputed per interval. The mix ratio is preserved but
|
||||
the absolute sub-layer heights change with the variable height. Review the
|
||||
layer preview after applying variable layers.
|
||||
- **Custom sequence disabled** — OrcaSlicer's "custom toolchange sequence" is
|
||||
suppressed when mixed filaments are active (`PlateSettingsDialog`). The
|
||||
virtual-to-physical resolution must control toolchange order; a user-defined
|
||||
sequence would break it.
|
||||
- **Stable IDs** — each mixed row carries a `stable_id` (64-bit). If you
|
||||
reorder or delete rows and then load an older project, the ID remap in
|
||||
`PresetBundle::update_mixed_filament_id_remap` translates painted geometry
|
||||
to the correct new virtual slot. Do not rely on the 1-based filament index
|
||||
as a stable identifier.
|
||||
|
||||
---
|
||||
|
||||
## Developer Guide
|
||||
|
||||
### Core Data Structures
|
||||
|
||||
```
|
||||
src/libslic3r/MixedFilament.hpp — MixedFilament struct, MixedFilamentManager
|
||||
src/libslic3r/MixedFilament.cpp — serialization, resolve(), auto_generate()
|
||||
src/libslic3r/LocalZOrderOptimizer.hpp — bucket-ordering helpers for Local-Z
|
||||
```
|
||||
|
||||
The key scalar fields on `MixedFilament`:
|
||||
|
||||
- `component_a`, `component_b` — 1-based physical filament indices.
|
||||
- `ratio_a`, `ratio_b` — layer-alternation cadence numerators.
|
||||
- `mix_b_percent` — nominal colour mix (used for Local-Z height computation
|
||||
and the Color Match preview; does not change the cadence).
|
||||
- `stable_id` — monotonically increasing 64-bit ID assigned at construction.
|
||||
Never reused. Survives serialization round-trips.
|
||||
- `distribution_mode` — selects between `Simple`, `SameLayerPointillisme`,
|
||||
and `GroupedManual`.
|
||||
|
||||
### Seam: Adding New Distribution Modes
|
||||
|
||||
`MixedFilamentManager::resolve()` in `MixedFilament.cpp` is the single
|
||||
dispatch point that maps `(virtual_filament_id, num_physical, layer_index)`
|
||||
to a physical extruder. The current switch covers `Simple` and
|
||||
`SameLayerPointillisme`. A new mode is added by:
|
||||
|
||||
1. Adding a value to the `MixedFilament::DistributionMode` enum in
|
||||
`MixedFilament.hpp`.
|
||||
2. Adding a `case` to `MixedFilamentManager::resolve()` in `MixedFilament.cpp`.
|
||||
3. Serializing the new mode token in `serialize_custom_entries` /
|
||||
`load_custom_entries` (format is a semicolon-delimited row string; see
|
||||
existing tokens for the convention).
|
||||
|
||||
G-code emission (`src/libslic3r/GCode/`) reads only the physical ID returned
|
||||
by `resolve()`, so new modes are automatically emitted without further changes.
|
||||
|
||||
### Seam: New Toolchange-Cost Heuristics
|
||||
|
||||
`LocalZOrderOptimizer` (`src/libslic3r/LocalZOrderOptimizer.hpp`) exposes:
|
||||
|
||||
- `order_bucket_extruders(bucket, current, preferred_last)` — reorders a
|
||||
single-layer bucket to minimise toolchanges given the current active extruder.
|
||||
- `order_pass_group(group, current_extruder)` — greedy walk across a set of
|
||||
buckets (one per Local-Z sub-layer) to minimise total transitions.
|
||||
|
||||
To add a new heuristic (e.g. cost-based look-ahead), replace or wrap
|
||||
`order_pass_group`. The caller in `PrintObjectSlice.cpp` passes the result
|
||||
directly into the sub-layer plan, so the heuristic is fully decoupled from
|
||||
the plan builder.
|
||||
|
||||
### Seam: New Picker Shapes in the Color Map Panel
|
||||
|
||||
`MixedFilamentColorMapPanel` (`src/slic3r/GUI/MixedFilamentColorMapPanel.hpp`)
|
||||
renders a 2-D colour map using a set of geometry "types" (currently strip and
|
||||
gradient). Each type is a small self-contained rendering path keyed by an enum
|
||||
value. New shapes are added by:
|
||||
|
||||
1. Adding an enum value to `MixedFilamentColorMapPanel::GeometryType`.
|
||||
2. Implementing the corresponding `Paint*` helper (follow `PaintStrip` as a
|
||||
template).
|
||||
3. Wiring the new type into the `switch` in `OnPaint`.
|
||||
|
||||
### Persistence (3MF)
|
||||
|
||||
The entire mixed-filament state is stored as a single string key
|
||||
`mixed_filament_definitions` in the project config block (section `[presets]`
|
||||
in the 3MF metadata).
|
||||
|
||||
Round-trip path:
|
||||
|
||||
```
|
||||
MixedFilamentManager::serialize_custom_entries()
|
||||
called by PresetBundle::sync_mixed_filaments_to_config()
|
||||
written by bbs_3mf: store_bbs_3mf → config.set("presets", "mixed_filament_definitions", ...)
|
||||
|
||||
load_bbs_3mf → config.get("presets", "mixed_filament_definitions")
|
||||
stored in project_config["mixed_filament_definitions"]
|
||||
read by PresetBundle::sync_mixed_filaments_from_config()
|
||||
→ mixed_filaments.auto_generate(colours)
|
||||
→ mixed_filaments.load_custom_entries(defs, colours)
|
||||
```
|
||||
|
||||
Auto-generated rows are *not* written to the definitions string; they are
|
||||
rebuilt from the filament colour list. Only `custom == true` rows are stored.
|
||||
|
||||
See `tests/fff_print/test_mixed_filament_e2e.cpp` for regression tests
|
||||
covering this path.
|
||||
|
||||
### ID Remap
|
||||
|
||||
When filaments are added, removed, or reordered, virtual IDs shift.
|
||||
`PresetBundle::update_mixed_filament_id_remap(old_mixed, old_count, new_count)`
|
||||
produces a `remap` vector where `remap[old_virtual_id] = new_virtual_id`.
|
||||
Painted triangle mesh face data uses these IDs; the remap is applied in
|
||||
`TriangleSelectorMixed` after any filament list change.
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -48,12 +48,9 @@ src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp
|
||||
src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h
|
||||
src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMove.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoScale.cpp
|
||||
@@ -61,7 +58,6 @@ src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp
|
||||
src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoCut.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFaceDetector.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
|
||||
@@ -71,9 +67,7 @@ src/slic3r/GUI/Gizmos/GLGizmoText.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMeasure.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoAssembly.hpp
|
||||
src/slic3r/GUI/GUI.cpp
|
||||
src/slic3r/GUI/GUI_App.cpp
|
||||
src/slic3r/GUI/GUI_AuxiliaryList.cpp
|
||||
@@ -95,8 +89,6 @@ src/slic3r/GUI/Widgets/AMSControl.cpp
|
||||
src/slic3r/GUI/Widgets/FanControl.cpp
|
||||
src/slic3r/GUI/Widgets/FilamentLoad.cpp
|
||||
src/slic3r/GUI/Widgets/TempInput.cpp
|
||||
src/slic3r/GUI/Widgets/CheckList.cpp
|
||||
src/slic3r/GUI/Widgets/SwitchButton.cpp
|
||||
src/slic3r/GUI/ImGuiWrapper.cpp
|
||||
src/slic3r/GUI/Jobs/ArrangeJob.cpp
|
||||
src/slic3r/GUI/Jobs/OrientJob.cpp
|
||||
@@ -106,7 +98,6 @@ src/slic3r/GUI/Jobs/BindJob.cpp
|
||||
src/slic3r/GUI/Jobs/PrintJob.cpp
|
||||
src/slic3r/GUI/Jobs/SendJob.cpp
|
||||
src/slic3r/GUI/Jobs/EmbossJob.cpp
|
||||
src/slic3r/GUI/Jobs/PlaterWorker.hpp
|
||||
src/slic3r/GUI/ThermalPreconditioningDialog.cpp
|
||||
src/slic3r/GUI/ThermalPreconditioningDialog.hpp
|
||||
src/slic3r/GUI/Jobs/SLAImportJob.cpp
|
||||
@@ -227,7 +218,6 @@ src/slic3r/GUI/CreatePresetsDialog.cpp
|
||||
src/slic3r/GUI/DailyTips.cpp
|
||||
src/slic3r/Utils/CalibUtils.cpp
|
||||
src/slic3r/GUI/PhysicalPrinterDialog.cpp
|
||||
src/slic3r/Utils/3DPrinterOS.cpp
|
||||
src/slic3r/Utils/AstroBox.cpp
|
||||
src/slic3r/Utils/Duet.cpp
|
||||
src/slic3r/Utils/FlashAir.cpp
|
||||
@@ -246,12 +236,8 @@ src/slic3r/GUI/FilamentMapPanel.cpp
|
||||
src/slic3r/Utils/Obico.cpp
|
||||
src/slic3r/Utils/SimplyPrint.cpp
|
||||
src/slic3r/Utils/Flashforge.cpp
|
||||
src/slic3r/Utils/ElegooLink.cpp
|
||||
src/slic3r/Utils/CrealityPrint.cpp
|
||||
src/slic3r/Utils/PrintHost.cpp
|
||||
src/slic3r/GUI/Jobs/OAuthJob.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoBrimEars.hpp
|
||||
src/slic3r/GUI/PartSkipDialog.cpp
|
||||
src/slic3r/GUI/PartSkipDialog.hpp
|
||||
src/slic3r/GUI/SkipPartCanvas.cpp
|
||||
@@ -263,12 +249,8 @@ src/slic3r/GUI/NetworkPluginDialog.cpp
|
||||
src/slic3r/GUI/RammingChart.cpp
|
||||
src/slic3r/GUI/StepMeshDialog.cpp
|
||||
src/slic3r/GUI/FilamentPickerDialog.hpp
|
||||
src/slic3r/GUI/PresetBundleDialog.cpp
|
||||
src/slic3r/GUI/ExportPresetBundleDialog.cpp
|
||||
src/slic3r/GUI/DesktopIntegrationDialog.cpp
|
||||
src/slic3r/GUI/Downloader.cpp
|
||||
src/slic3r/GUI/DownloaderFileGet.cpp
|
||||
src/slic3r/GUI/FileArchiveDialog.cpp
|
||||
src/slic3r/GUI/PrinterCloudAuthDialog.cpp
|
||||
src/slic3r/GUI/PrinterWebViewHandler.cpp
|
||||
src/libslic3r/PresetBundle.cpp
|
||||
src/slic3r/GUI/MixedFilamentColorMatchDialog.cpp
|
||||
src/slic3r/GUI/MixedFilamentColorMatchDialog.hpp
|
||||
src/slic3r/GUI/MixedFilamentConfigPanel.cpp
|
||||
src/slic3r/GUI/MixedFilamentConfigPanel.hpp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="214" height="80" viewBox="0 0 214 80"><g id="b"><g id="c"><rect width="80" height="80" rx="9.57" ry="9.57" style="fill:#949494;"/></g></g><g id="d"><path id="e" d="M17.3,62.94c4.46,4.45,10.59,7.21,17.36,7.24,13.7.06,24.93-11.22,24.87-25-.03-6.81-2.77-12.97-7.2-17.45L17.31,62.94h0Z" style="fill:#292826;"/></g><g id="f"><path id="g" d="M52.32,27.73L17.3,62.94s.05.05.08.07c12.27-6.26,29.08-17.26,40.6-26.43-1.24-3.36-3.19-6.38-5.65-8.87" style="fill:#009789;"/></g><g id="h"><path id="i" d="M45.48,9.82c-13.67,0-24.77,11.15-24.77,24.91,0,6.85,2.75,13.05,7.2,17.56L62.94,17.07c-4.48-4.47-10.65-7.24-17.46-7.24" style="fill:#292826;"/></g><g id="j"><path id="k" d="M45.48,9.82c-4.74,0-9.17,1.34-12.93,3.65-2.02-.53-4.52-.95-7.39-.93-5,.03-9.08,1.39-11.85,2.65-.69.32-.58,1.33.16,1.49,1.82.39,4.22,1.19,6.59,2.95,1.5,1.1,2.64,2.33,3.5,3.48-1.82,3.47-2.85,7.42-2.85,11.61,0,2.5.37,4.92,1.05,7.2,1.04-2.32,2.14-3.87,2.5-4.36,2.27-3.13,4.68-4.76,8.23-7.15,2.62-1.77,6.26-3.84,16.7-8.14,0,0,3.27-.92,7.65-3.53,1.75-1.04,3.08-2.02,3.5-3.56.03-.11.06-.22.08-.32-4.15-3.17-9.33-5.04-14.95-5.04" style="fill:#262523;"/></g><g id="l"><path id="m" d="M49.61,18.19c.9,1.61-.91,4.37-4.06,6.17s-6.44,1.96-7.35.36c-.9-1.61.91-4.37,4.06-6.17,3.15-1.8,6.44-1.96,7.35-.36" style="fill:#949494;"/></g><path d="M142.44,48.1c-1.01,0-1.84.82-1.84,1.84v18.4c0,1.01.82,1.84,1.84,1.84s1.84-.82,1.84-1.84v-18.4c0-1.01-.82-1.84-1.84-1.84ZM190.71,48.1h-4.4c-6.09,0-11.04,4.96-11.04,11.04s4.96,11.04,11.04,11.04h4.4c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84h-4.4c-4.06,0-7.36-3.3-7.36-7.36s3.3-7.36,7.36-7.36h4.4c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84v-.02.02ZM190.71,57.31h-5.35c-1.01,0-1.84.82-1.84,1.84s.82,1.84,1.84,1.84h5.35c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84ZM105.69,70.18h-8.91c-1.01,0-1.83-.82-1.83-1.83s.81-1.83,1.83-1.83h8.91c1.53,0,2.78-1.24,2.78-2.78s-1.24-2.77-2.78-2.77h-4.31c-3.55,0-6.43-2.89-6.43-6.43s2.89-6.43,6.43-6.43h7.29c1.01,0,1.83.82,1.83,1.83s-.81,1.83-1.83,1.83h-7.29c-1.53,0-2.78,1.24-2.78,2.78s1.24,2.77,2.78,2.77h4.31c3.55,0,6.43,2.89,6.43,6.43s-2.89,6.43-6.43,6.43h0ZM165.89,65.28c-1.49.98-3.35,1.44-5.32,1.11-2.99-.51-5.4-2.88-5.96-5.85-.86-4.67,2.71-8.76,7.23-8.76,1.49,0,2.88.45,4.04,1.21.73.49,1.71.41,2.32-.22h0c.81-.81.71-2.17-.25-2.81-2.12-1.42-4.76-2.13-7.56-1.77-4.98.64-8.97,4.69-9.52,9.66-.75,6.65,4.46,12.32,10.96,12.32,2.23,0,4.31-.67,6.05-1.81.98-.65,1.15-2.03.32-2.86h0c-.63-.63-1.59-.71-2.32-.23h.01ZM132.24,66.5h-5.31c-2.53,0-4.6-2.07-4.6-4.6v-11.96c0-1.01-.82-1.84-1.84-1.84s-1.84.82-1.84,1.84v11.96c0,4.57,3.71,8.28,8.28,8.28h5.31c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84h0ZM211.96,51.79h-1.84c-4.03,0-7.32,3.27-7.36,7.3v9.27c0,1.01-.82,1.84-1.84,1.84s-1.84-.82-1.84-1.84v-9.27c.04-6.06,4.98-10.97,11.03-10.97h1.84c1.01,0,1.84.82,1.84,1.84s-.82,1.84-1.84,1.84h0Z" style="fill:#949494;"/><path d="M109.73,14.37c5.64,0,10.24,4.59,10.24,10.24s-4.59,10.24-10.24,10.24-10.24-4.59-10.24-10.24,4.59-10.24,10.24-10.24M109.73,9.82c-8.16,0-14.79,6.62-14.79,14.79s6.62,14.79,14.79,14.79,14.79-6.62,14.79-14.79-6.62-14.79-14.79-14.79h0ZM211.52,9.82c-1.26,0-2.27,1.02-2.27,2.27v1.86c-2.66-2.55-6.26-4.13-10.24-4.13-8.16,0-14.79,6.62-14.79,14.79s6.62,14.79,14.79,14.79c3.97,0,7.58-1.58,10.24-4.13v1.86c0,1.26,1.02,2.27,2.27,2.27s2.27-1.02,2.27-2.27V12.1c0-1.26-1.02-2.27-2.27-2.27h0ZM199.01,34.85c-5.64,0-10.24-4.59-10.24-10.24s4.59-10.24,10.24-10.24,10.24,4.59,10.24,10.24-4.59,10.24-10.24,10.24ZM148.11,9.82h-2.27c-8.16,0-14.79,6.62-14.79,14.79v12.51c0,1.26,1.02,2.27,2.27,2.27s2.27-1.02,2.27-2.27v-12.51c0-5.64,4.59-10.24,10.24-10.24h2.27c1.26,0,2.27-1.02,2.27-2.27s-1.02-2.27-2.27-2.27h0ZM175.38,33.05c-1.99,1.36-4.47,2.05-7.12,1.71-4.61-.59-8.31-4.35-8.84-8.97-.7-6.18,4.13-11.43,10.17-11.43,2.14,0,4.11.66,5.75,1.77.92.63,2.15.56,2.95-.24h0c1.02-1.02.83-2.7-.36-3.52-2.75-1.89-6.18-2.86-9.84-2.49-6.85.68-12.42,6.17-13.19,13.01-1,8.93,5.97,16.49,14.7,16.49,3.11,0,5.99-.95,8.36-2.59,1.18-.81,1.34-2.49.33-3.51h0c-.78-.78-2-.88-2.91-.26v.02h0Z" style="fill:#009789;"/></svg>
|
||||
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="214" height="80" viewBox="0 0 214 80"><g id="b"><g id="c"><rect width="80" height="80" rx="9.57" ry="9.57" style="fill:#e9e9e9;"/></g></g><g id="d"><path id="e" d="M17.3,62.94c4.46,4.45,10.59,7.21,17.36,7.24,13.7.06,24.93-11.22,24.87-25-.03-6.81-2.77-12.97-7.2-17.45L17.31,62.94h0Z" style="fill:#292826;"/></g><g id="f"><path id="g" d="M52.32,27.73L17.3,62.94s.05.05.08.07c12.27-6.26,29.08-17.26,40.6-26.43-1.24-3.36-3.19-6.38-5.65-8.87" style="fill:#009789;"/></g><g id="h"><path id="i" d="M45.48,9.82c-13.67,0-24.77,11.15-24.77,24.91,0,6.85,2.75,13.05,7.2,17.56L62.94,17.07c-4.48-4.47-10.65-7.24-17.46-7.24" style="fill:#292826;"/></g><g id="j"><path id="k" d="M45.48,9.82c-4.74,0-9.17,1.34-12.93,3.65-2.02-.53-4.52-.95-7.39-.93-5,.03-9.08,1.39-11.85,2.65-.69.32-.58,1.33.16,1.49,1.82.39,4.22,1.19,6.59,2.95,1.5,1.1,2.64,2.33,3.5,3.48-1.82,3.47-2.85,7.42-2.85,11.61,0,2.5.37,4.92,1.05,7.2,1.04-2.32,2.14-3.87,2.5-4.36,2.27-3.13,4.68-4.76,8.23-7.15,2.62-1.77,6.26-3.84,16.7-8.14,0,0,3.27-.92,7.65-3.53,1.75-1.04,3.08-2.02,3.5-3.56.03-.11.06-.22.08-.32-4.15-3.17-9.33-5.04-14.95-5.04" style="fill:#262523;"/></g><g id="l"><path id="m" d="M49.61,18.19c.9,1.61-.91,4.37-4.06,6.17s-6.44,1.96-7.35.36c-.9-1.61.91-4.37,4.06-6.17,3.15-1.8,6.44-1.96,7.35-.36" style="fill:#fff;"/></g><path d="M142.44,48.1c-1.01,0-1.84.82-1.84,1.84v18.4c0,1.01.82,1.84,1.84,1.84s1.84-.82,1.84-1.84v-18.4c0-1.01-.82-1.84-1.84-1.84ZM190.71,48.1h-4.4c-6.09,0-11.04,4.96-11.04,11.04s4.96,11.04,11.04,11.04h4.4c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84h-4.4c-4.06,0-7.36-3.3-7.36-7.36s3.3-7.36,7.36-7.36h4.4c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84v-.02.02ZM190.71,57.31h-5.35c-1.01,0-1.84.82-1.84,1.84s.82,1.84,1.84,1.84h5.35c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84ZM105.69,70.18h-8.91c-1.01,0-1.83-.82-1.83-1.83s.81-1.83,1.83-1.83h8.91c1.53,0,2.78-1.24,2.78-2.78s-1.24-2.77-2.78-2.77h-4.31c-3.55,0-6.43-2.89-6.43-6.43s2.89-6.43,6.43-6.43h7.29c1.01,0,1.83.82,1.83,1.83s-.81,1.83-1.83,1.83h-7.29c-1.53,0-2.78,1.24-2.78,2.78s1.24,2.77,2.78,2.77h4.31c3.55,0,6.43,2.89,6.43,6.43s-2.89,6.43-6.43,6.43h0ZM165.89,65.28c-1.49.98-3.35,1.44-5.32,1.11-2.99-.51-5.4-2.88-5.96-5.85-.86-4.67,2.71-8.76,7.23-8.76,1.49,0,2.88.45,4.04,1.21.73.49,1.71.41,2.32-.22h0c.81-.81.71-2.17-.25-2.81-2.12-1.42-4.76-2.13-7.56-1.77-4.98.64-8.97,4.69-9.52,9.66-.75,6.65,4.46,12.32,10.96,12.32,2.23,0,4.31-.67,6.05-1.81.98-.65,1.15-2.03.32-2.86h0c-.63-.63-1.59-.71-2.32-.23h.01ZM132.24,66.5h-5.31c-2.53,0-4.6-2.07-4.6-4.6v-11.96c0-1.01-.82-1.84-1.84-1.84s-1.84.82-1.84,1.84v11.96c0,4.57,3.71,8.28,8.28,8.28h5.31c1.01,0,1.84-.82,1.84-1.84s-.82-1.84-1.84-1.84h0ZM211.96,51.79h-1.84c-4.03,0-7.32,3.27-7.36,7.3v9.27c0,1.01-.82,1.84-1.84,1.84s-1.84-.82-1.84-1.84v-9.27c.04-6.06,4.98-10.97,11.03-10.97h1.84c1.01,0,1.84.82,1.84,1.84s-.82,1.84-1.84,1.84h0Z" style="fill:#949494;"/><path d="M109.73,14.37c5.64,0,10.24,4.59,10.24,10.24s-4.59,10.24-10.24,10.24-10.24-4.59-10.24-10.24,4.59-10.24,10.24-10.24M109.73,9.82c-8.16,0-14.79,6.62-14.79,14.79s6.62,14.79,14.79,14.79,14.79-6.62,14.79-14.79-6.62-14.79-14.79-14.79h0ZM211.52,9.82c-1.26,0-2.27,1.02-2.27,2.27v1.86c-2.66-2.55-6.26-4.13-10.24-4.13-8.16,0-14.79,6.62-14.79,14.79s6.62,14.79,14.79,14.79c3.97,0,7.58-1.58,10.24-4.13v1.86c0,1.26,1.02,2.27,2.27,2.27s2.27-1.02,2.27-2.27V12.1c0-1.26-1.02-2.27-2.27-2.27h0ZM199.01,34.85c-5.64,0-10.24-4.59-10.24-10.24s4.59-10.24,10.24-10.24,10.24,4.59,10.24,10.24-4.59,10.24-10.24,10.24ZM148.11,9.82h-2.27c-8.16,0-14.79,6.62-14.79,14.79v12.51c0,1.26,1.02,2.27,2.27,2.27s2.27-1.02,2.27-2.27v-12.51c0-5.64,4.59-10.24,10.24-10.24h2.27c1.26,0,2.27-1.02,2.27-2.27s-1.02-2.27-2.27-2.27h0ZM175.38,33.05c-1.99,1.36-4.47,2.05-7.12,1.71-4.61-.59-8.31-4.35-8.84-8.97-.7-6.18,4.13-11.43,10.17-11.43,2.14,0,4.11.66,5.75,1.77.92.63,2.15.56,2.95-.24h0c1.02-1.02.83-2.7-.36-3.52-2.75-1.89-6.18-2.86-9.84-2.49-6.85.68-12.42,6.17-13.19,13.01-1,8.93,5.97,16.49,14.7,16.49,3.11,0,5.99-.95,8.36-2.59,1.18-.81,1.34-2.49.33-3.51h0c-.78-.78-2-.88-2.91-.26v.02h0Z" style="fill:#009789;"/></svg>
|
||||
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
||||
<line x1="0.5" y1="4.5" x2="7.5" y2="4.5" style="fill:none;stroke:#949494;stroke-linecap:square;stroke-linejoin:round"/>
|
||||
<line x1="15.5" y1="4.5" x2="16.5" y2="4.5" style="fill:none;stroke:#949494;stroke-linecap:square;stroke-linejoin:round"/>
|
||||
<rect x="7.5" y="0.5" width="8" height="13" rx="1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/>
|
||||
<circle cx="11.5" cy="7.5" r="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/>
|
||||
<polyline points="9.5 13.5 11.5 16.5 13.5 13.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/>
|
||||
|
||||
<path d="M1.5 6.2 L1.5 11.6 C1.5 14.0 3.0 15.5 5.4 15.5 L8.2 15.5"
|
||||
style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 867 B |
|
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 353 B |
283
resources/plugins/elegoolink/web/lan_service_web/index.html
Normal file
283
resources/plugins/elegoolink/web/lan_service_web/index.html
Normal file
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Afinia",
|
||||
"version": "02.04.00.01",
|
||||
"version": "02.04.00.00",
|
||||
"force_update": "0",
|
||||
"description": "Afinia configurations",
|
||||
"machine_model_list": [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00",
|
||||
"setting_id": "i5tf9foHnTVNmA2r",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia ABS+",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00_01",
|
||||
"setting_id": "wAJTMxtCY7EoavRi",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia ABS+@HS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00",
|
||||
"setting_id": "LhDHvMepbh8ecfQT",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia ABS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00_01",
|
||||
"setting_id": "qCDnb2iBaz4hd4vX",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia ABS@HS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFA00",
|
||||
"setting_id": "1qEFsay7kjYIUkpG",
|
||||
"setting_id": "GFSA00",
|
||||
"name": "Afinia PLA",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFA00_01",
|
||||
"setting_id": "N3sCgjdjvp6FTtw9",
|
||||
"setting_id": "GFSA00",
|
||||
"name": "Afinia PLA@HS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"name": "Afinia TPU",
|
||||
"inherits": "fdm_filament_tpu",
|
||||
"from": "system",
|
||||
"setting_id": "E7WBTARZ971LaDMj",
|
||||
"filament_id": "GFU01",
|
||||
"instantiation": "true",
|
||||
"filament_vendor": [
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"name": "Afinia TPU@HS",
|
||||
"inherits": "fdm_filament_tpu",
|
||||
"from": "system",
|
||||
"setting_id": "zUqTgAEbqTN1EdRl",
|
||||
"filament_id": "GFU01_01",
|
||||
"instantiation": "true",
|
||||
"filament_vendor": [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00",
|
||||
"setting_id": "jEYVpOPBjFtQ0DXn",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia Value ABS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB00_01",
|
||||
"setting_id": "OxIiEYjbhEvSykaQ",
|
||||
"setting_id": "GFSB00",
|
||||
"name": "Afinia Value ABS@HS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFA00",
|
||||
"setting_id": "oNBk0IxmW7C99WI3",
|
||||
"setting_id": "GFSA00",
|
||||
"name": "Afinia Value PLA",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFA00_01",
|
||||
"setting_id": "BASsUdyvElEVJ9AA",
|
||||
"setting_id": "GFSA00",
|
||||
"name": "Afinia Value PLA@HS",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"setting_id": "iwkXfmEyz9RLZTvh",
|
||||
"setting_id": "GM001",
|
||||
"name": "Afinia H+1(HS) 0.4 nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"setting_id": "vngsrxKvEIsmr8tQ",
|
||||
"setting_id": "GM001",
|
||||
"name": "Afinia H+1(HS) 0.6 nozzle",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "FueWYijuvLNWzNmL",
|
||||
"setting_id": "GP004",
|
||||
"name": "0.12mm Fine @Afinia H+1(HS)",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "Ntf0ZMcETTPz7EY1",
|
||||
"setting_id": "GP004",
|
||||
"name": "0.16mm Optimal @Afinia H+1(HS)",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.18mm Fine @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.18_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "b7oGgrSCik70LqdL",
|
||||
"setting_id": "GP021",
|
||||
"instantiation": "true",
|
||||
"description": "It has a smaller layer height and results in smoother surface and higher printing quality.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "Lxid5Z2e0fvVDMMm",
|
||||
"setting_id": "GP004",
|
||||
"name": "0.20mm Standard @Afinia H+1(HS)",
|
||||
"from": "system",
|
||||
"inherits": "fdm_process_afinia_HS_common",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "APeSqnRZh6I9OTFr",
|
||||
"setting_id": "GP004",
|
||||
"name": "0.24mm Draft @Afinia H+1(HS)",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.24mm Standard @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.24_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "QlOnQEeUXkGaxZS5",
|
||||
"setting_id": "GP022",
|
||||
"instantiation": "true",
|
||||
"description": "It has a balanced layer height for good quality and reasonable printing time.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"type": "process",
|
||||
"setting_id": "VZ3NOVzdVWqZ37Ge",
|
||||
"setting_id": "GP004",
|
||||
"name": "0.28mm Extra Draft @Afinia H+1(HS)",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.30mm Standard @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "7PPJm0girx11EP80",
|
||||
"setting_id": "GP023",
|
||||
"instantiation": "true",
|
||||
"description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "BewLobRVuiw6HPuc",
|
||||
"setting_id": "GP024",
|
||||
"instantiation": "true",
|
||||
"description": "It has a big layer height with optimized settings for stronger parts.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.36mm Draft @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.36_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "pBS3NpSZPjtySd3X",
|
||||
"setting_id": "GP025",
|
||||
"instantiation": "true",
|
||||
"description": "It has a bigger layer height for faster printing but with more visible layer lines.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle",
|
||||
"inherits": "fdm_process_afinia_0.42_nozzle_0.6_HS",
|
||||
"from": "system",
|
||||
"setting_id": "kHUEpY5ZMtYrLKtO",
|
||||
"setting_id": "GP026",
|
||||
"instantiation": "true",
|
||||
"description": "It has the biggest layer height for fastest printing but with very visible layer lines.",
|
||||
"elefant_foot_compensation": "0.15",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Anker",
|
||||
"version": "02.04.00.01",
|
||||
"version": "02.04.00.00",
|
||||
"force_update": "0",
|
||||
"description": "Anker configurations",
|
||||
"machine_model_list": [
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ABS 0.2 nozzle",
|
||||
"inherits": "Anker Generic ABS @base",
|
||||
"from": "system",
|
||||
"setting_id": "BD5ODYVM90Ig44C5",
|
||||
"setting_id": "GFSB99_20",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"2"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ABS 0.25 nozzle",
|
||||
"inherits": "Anker Generic ABS @base",
|
||||
"from": "system",
|
||||
"setting_id": "WS5wXckNuiQqSVwO",
|
||||
"setting_id": "GFSB99_25",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"3"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ABS",
|
||||
"inherits": "Anker Generic ABS @base",
|
||||
"from": "system",
|
||||
"setting_id": "axEspGzFJnrnidm4",
|
||||
"setting_id": "GFSB99",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Anker M5 0.4 nozzle",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ASA 0.2 nozzle",
|
||||
"inherits": "Anker Generic ASA @base",
|
||||
"from": "system",
|
||||
"setting_id": "G7pzEyyhPFDnae3R",
|
||||
"setting_id": "GFSB98_20",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"2"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ASA 0.25 nozzle",
|
||||
"inherits": "Anker Generic ASA @base",
|
||||
"from": "system",
|
||||
"setting_id": "ErUUDTQ7h1wNHAKT",
|
||||
"setting_id": "GFSB98_25",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"3"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic ASA",
|
||||
"inherits": "Anker Generic ASA @base",
|
||||
"from": "system",
|
||||
"setting_id": "QiFoBW5WuDUJGmFZ",
|
||||
"setting_id": "GFSB98",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Anker M5 0.4 nozzle",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic PA 0.2 nozzle",
|
||||
"inherits": "Anker Generic PA @base",
|
||||
"from": "system",
|
||||
"setting_id": "NZB26MSD9WbOeY2S",
|
||||
"setting_id": "GFSN99_20",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"2"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "Anker Generic PA 0.25 nozzle",
|
||||
"inherits": "Anker Generic PA @base",
|
||||
"from": "system",
|
||||
"setting_id": "Wj7oXTGUxo8lie1B",
|
||||
"setting_id": "GFSN99_25",
|
||||
"instantiation": "true",
|
||||
"filament_max_volumetric_speed": [
|
||||
"3"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user