121 Commits

Author SHA1 Message Date
wjyLearn
17514949c7 Update Qidi X-Max 4 0.4 nozzle.json 2026-01-23 20:34:43 +08:00
wjyLearn
f4ceb61f09 fix some bug 2026-01-23 19:33:52 +08:00
wjyLearn
6fbf2cf4b4 fix some bug 2026-01-23 16:57:05 +08:00
wjyLearn
43b1e29445 fix some bug 2026-01-23 11:55:27 +08:00
wjyLearn
1c2612e116 fix some bug 2026-01-23 10:28:08 +08:00
wjyLearn
96353b9c70 update version to v02.04.01.10 2026-01-23 09:23:33 +08:00
Wu JY
1c213cf00c Merge pull request #155 from Rudokhvist/CI
Fix MacOS build on CI
2025-12-23 12:29:07 +08:00
Rudokhvist
682d7fa8c2 Clean up debug output in main.yml
Removed debug echo statements from workflow.
2025-12-22 15:32:22 +02:00
Rudokhvist
984eab839f Merge branch 'QIDITECH:main' into CI 2025-12-22 13:29:21 +02:00
wjyLearn
97dcb7faee fix some bug 2025-12-22 19:27:47 +08:00
Rudokhvist
07f3f57ff9 Remove boost installation from workflow
Removed unnecessary installation command for boost.
2025-12-22 10:58:07 +02:00
Rudokhvist
af515a1dd8 Update Homebrew formula for boost@1.76 2025-12-22 10:54:05 +02:00
Rudokhvist
0d7743b677 Update Homebrew formula URL for boost@1.76 2025-12-22 10:51:43 +02:00
Rudokhvist
671ddc1a6a Add debug echo and cat commands in workflow
Added debug output for boost@1.76.rb installation.
2025-12-22 10:47:37 +02:00
Rudokhvist
2ed80815f0 Refactor Homebrew installation for boost@1.76
Updated Homebrew installation script to fetch boost@1.76.rb directly and modified the source URL for boost download.
2025-12-22 10:45:14 +02:00
Rudokhvist
37c90ca9ab Fix Homebrew installation script for macOS 2025-12-22 10:41:19 +02:00
Rudokhvist
a7c46d239e Remove boost@1.76 installation from workflow
Removed installation of boost@1.76 from macOS workflow.
2025-12-22 10:35:25 +02:00
Rudokhvist
0235484d93 Fix boost formulae in Homebrew workflow
Update boost formula URL in main.yml for Homebrew.
2025-12-22 10:31:31 +02:00
Rudokhvist
6d18e77544 Update Homebrew formula file names in workflow 2025-12-22 10:22:07 +02:00
Rudokhvist
374619bf24 Fix file paths for Homebrew formula installation 2025-12-22 10:19:41 +02:00
Rudokhvist
79257f9f9c Update Homebrew setup for libraries on Mac
Replaced Homebrew formula modifications with direct curl downloads for boost and icu4c.
2025-12-22 10:16:36 +02:00
Rudokhvist
a8f256aaa0 Add boost search command in Mac setup workflow 2025-12-22 09:26:51 +02:00
wjyLearn
c94ff49059 fix macos build 2025-12-22 12:26:51 +08:00
Wu JY
5d5b4e9d63 Merge pull request #146 from Rudokhvist/CI
Add CI to build on every push
2025-12-22 10:27:58 +08:00
wjyLearn
7f8ce1141c update version 2025-12-20 20:21:01 +08:00
wjyLearn
c23ce3c50a update src 2025-12-20 20:19:00 +08:00
wjyLearn
1a5e691672 update src\slic3r 2025-12-20 20:17:14 +08:00
wjyLearn
1078fe3389 update src\platform 2025-12-20 19:16:47 +08:00
wjyLearn
50572b196e update src\libslic3r 2025-12-20 19:15:57 +08:00
wjyLearn
69be99b00a update resources\web 2025-12-20 17:45:44 +08:00
wjyLearn
328f91afc2 update profiles 2025-12-20 17:41:25 +08:00
wjyLearn
408593c742 update resources 2025-12-20 17:21:00 +08:00
wjyLearn
e2c100f32d update translation 2025-12-20 17:19:07 +08:00
wjyLearn
d68307db4f update deps of mac 2025-12-20 16:15:38 +08:00
Rudokhvist
0acf5a33a2 Add CI to build on every push 2025-11-29 22:07:59 +02:00
wjyLearn
923263352a fix some bug 2025-11-26 15:10:44 +08:00
wjyLearn
8cdbd765df update version to 02.03.01.70 2025-11-25 15:02:54 +08:00
wjyLearn
8ce31ed7e1 fix some bug 2025-11-25 15:02:34 +08:00
wjyLearn
2809d34cb6 Add the configuration of the new machine Q2C and X-Max 4. 2025-11-25 15:01:15 +08:00
wjyLearn
82268132e9 fix some bug 2025-10-24 17:20:44 +08:00
wjyLearn
81ea36fdd8 fix some bug 2025-10-24 14:48:36 +08:00
wjyLearn
96cf7d2194 fix some bug 2025-10-24 14:37:50 +08:00
Wu JY
7878c0d2f4 Merge pull request #121 from Rudokhvist/debug
Fix build issues. Closes #120
2025-10-21 11:57:15 +08:00
Wu JY
6db0e20de9 Merge pull request #129 from Psych0h3ad/main
Fixed Japanese translation
2025-10-21 11:52:24 +08:00
Psych0h3ad
300b4e046d Merge pull request #1 from Psych0h3ad/Psych0h3ad-patch-1
Update index.html
2025-10-13 23:58:44 +09:00
Psych0h3ad
9ffbc2c959 Update index.html
Fixed Japanese translation
2025-10-13 23:58:04 +09:00
QIDI TECH
d8620a4d4d version update 2025-09-28 17:53:59 +08:00
QIDI TECH
6b46f9fd48 fix some bug 2025-09-26 11:05:45 +08:00
QIDI TECH
71252cf326 Update Qidi Q2 0.4 nozzle.json 2025-09-25 13:01:38 +08:00
QIDI TECH
6ec016a6f8 fix some bug 2025-09-25 12:07:30 +08:00
QIDI TECH
8177bf8912 fix some bug 2025-09-23 14:20:39 +08:00
QIDI TECH
523aea89af Update Qidi Q2 0.4 nozzle.json 2025-09-23 09:30:21 +08:00
QIDI TECH
f16489db9c version update 2025-09-22 19:17:43 +08:00
QIDI TECH
56232999f5 fix some bug 2025-09-22 15:42:42 +08:00
Rudokhvist
4648145b67 switch to new tool for appimage building 2025-09-19 18:12:47 +03:00
Rudokhvist
89a8103bad fix build 2025-09-19 11:08:36 +03:00
QIDI TECH
5cdfef9f9e update slic3r 2025-09-17 12:32:36 +08:00
QIDI TECH
0c78224f1a update libslic3r 2025-09-17 09:42:58 +08:00
QIDI TECH
eec6d77112 update resources 2025-09-17 09:23:01 +08:00
QIDI TECH
72a3a1e841 Update PrinterWebView.cpp 2025-08-18 14:27:10 +08:00
QIDI TECH
87acaa14f7 version update 2025-08-18 11:08:15 +08:00
QIDI TECH
dab82d0248 update src 2025-08-18 10:34:25 +08:00
QIDI TECH
15dd71693d update resources 2025-08-18 10:06:13 +08:00
QIDI TECH
2fa18f50c6 fix some bug 2025-08-06 15:29:14 +08:00
QIDI TECH
38c3592758 fix some bug 2025-08-05 16:12:34 +08:00
QIDI TECH
8a68adb427 update version 2025-08-04 16:37:41 +08:00
QIDI TECH
661b112a68 update slic3r 2025-08-04 16:30:53 +08:00
QIDI TECH
8d4d60ec48 update libslic3r 2025-08-04 10:13:51 +08:00
QIDI TECH
e3f49c2fb5 update resources 2025-08-01 14:48:54 +08:00
QIDI TECH
5effa59bd0 update i18n 2025-08-01 14:20:48 +08:00
QIDI TECH
8ed41b9f06 update deps 2025-08-01 14:19:36 +08:00
QIDI TECH
fc0a06deaa update box temp 2025-07-12 08:44:35 +08:00
QIDI TECH
a253e093f8 Update version.inc 2025-07-11 13:57:21 +08:00
QIDI TECH
64806161f0 Merge pull request #91 from lishniy/patch-1
Update index.html
2025-07-11 10:08:47 +08:00
QIDI TECH
4dadec668b fix bug of print time 2025-07-11 10:06:00 +08:00
QIDI TECH
eb7e027385 version update 2025-07-11 10:02:29 +08:00
QIDI TECH
7f04d94ea1 fix some bug 2025-07-11 10:01:30 +08:00
QIDI TECH
f60592f1a0 update slic3r 2025-07-10 09:14:38 +08:00
QIDI TECH
e0d447172c update libslic3r 2025-07-08 20:00:47 +08:00
QIDI TECH
bafe693d0a update resources 2025-07-08 19:28:13 +08:00
QIDI TECH
c56a6849eb update translation 2025-07-08 19:16:23 +08:00
Dima Yakovenko
e8c9baa840 Update index.html 2025-06-01 11:52:59 +03:00
Dima Yakovenko
688396a0a0 Update index.html
Wrong Russian translate
2025-06-01 11:44:03 +03:00
QIDI TECH
8c9640a666 fix some bug 2025-05-29 15:24:50 +08:00
QIDI TECH
37aa092244 version update 2025-05-29 13:59:10 +08:00
QIDI TECH
60d6348a42 fix some bug 2025-05-29 13:56:52 +08:00
QIDI TECH
6d0ec79031 fix some bug 2025-05-24 10:17:38 +08:00
QIDI TECH
b68290818e version update 2025-05-24 08:55:43 +08:00
QIDI TECH
031525a16e fix some bug 2025-05-23 20:18:49 +08:00
QIDI TECH
5ac6bf0ccb fix some bug 2025-05-10 13:12:11 +08:00
QIDI TECH
958f8339bc fix some bug 2025-05-09 20:39:27 +08:00
QIDI TECH
9b0892b7c2 Update Plater.cpp 2025-05-09 09:50:11 +08:00
QIDI TECH
ef9e434eac fix some bug 2025-05-08 16:44:05 +08:00
QIDI TECH
652ba5e232 version update 2025-05-08 15:20:15 +08:00
QIDI TECH
18c33f93a6 update translation 2025-05-08 15:16:20 +08:00
QIDI TECH
011619cf23 update slic3r 2025-05-08 15:05:30 +08:00
QIDI TECH
126534997a update libslic3r 2025-05-05 19:52:57 +08:00
QIDI TECH
eae8e18c3a update src 2025-05-05 15:13:42 +08:00
QIDI TECH
3fe258372a update resources 2025-05-05 14:58:54 +08:00
QIDI TECH
524bd808f3 Update translation 2025-05-04 17:25:01 +08:00
QIDI TECH
156efaf48b Update translation 2025-05-04 17:24:29 +08:00
QIDI TECH
24b78d2251 update deps 2025-05-04 10:51:12 +08:00
QIDI TECH
93ac431989 fix some bug 2025-02-28 15:45:20 +08:00
QIDI TECH
1c65d0ad5a version update 2025-02-26 20:27:04 +08:00
QIDI TECH
a19b41c650 fix some bug 2025-02-26 20:25:18 +08:00
QIDI TECH
ffb5d3da8a update slic3r 2025-02-26 20:14:36 +08:00
QIDI TECH
d32f03deb8 update libslic3r 2025-02-26 20:06:22 +08:00
QIDI TECH
7d213ce20c update resources 2025-02-26 20:01:47 +08:00
QIDI TECH
29360eb5e5 Update translation 2025-02-26 19:57:41 +08:00
QIDI TECH
5e2ebff297 update profile 2025-02-26 08:50:46 +08:00
QIDI TECH
c2b046e661 Create Generic PC.json 2025-02-25 16:43:23 +08:00
QIDI TECH
dcdb92f45e Update SelectMachine.cpp 2025-02-25 16:11:20 +08:00
QIDI TECH
fc45eaa121 version update 2025-02-25 10:55:19 +08:00
QIDI TECH
1957136227 fix some bug 2025-02-25 10:53:15 +08:00
QIDI TECH
afc204307c update profile 2025-02-25 10:49:05 +08:00
QIDI TECH
b3e22f837b Update translation 2025-02-25 10:34:37 +08:00
QIDI TECH
e2bde71a1c version update 2025-01-03 15:04:24 +08:00
QIDI TECH
a320582cdc fix some bug 2025-01-03 15:03:32 +08:00
QIDI TECH
360ceaa458 Add WOOD PLA and UltraPA-CF25 2025-01-03 15:01:11 +08:00
QIDI TECH
973d18ea63 Update qidilink.png 2024-12-13 16:42:52 +08:00
QIDI TECH
1c5fda6cad fix bug 2024-12-13 16:14:37 +08:00
3257 changed files with 367604 additions and 161121 deletions

148
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,148 @@
name: QIDIStudio-CI
on: [push, pull_request]
jobs:
main:
strategy:
matrix:
os: [ubuntu-latest, windows-2022, macos-15-intel]
runs-on: ${{ matrix.os }}
steps:
- name: Setup MSBUILD
if: startsWith(matrix.os, 'windows-')
uses: microsoft/setup-msbuild@v2
with:
vs-version: '[17.0,18.0)'
- name: Setup libraries on linux
if: startsWith(matrix.os, 'ubuntu-')
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
cmake \
extra-cmake-modules \
libglu1-mesa-dev \
libgtk-3-dev \
libdbus-1-dev \
libwebkit2gtk-4.1-dev \
libboost*1.74-dev \
libglfw3-dev \
libnlopt*-dev \
libtbb-dev \
nasm \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-bad1.0-dev \
libcurl4-openssl-dev \
libosmesa6-dev
- name: Setup libraries on Mac
if: startsWith(matrix.os, 'macos-')
run: |
brew update
export HOMEBREW_NO_INSTALL_FROM_API=1
sed -i '' -e 's/disable!/#disable!/' /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/i/icu4c@74.rb
curl https://raw.githubusercontent.com/Homebrew/homebrew-core/aba405a30fa1a608a12adeb56bea8e1c5975a42d/Formula/b/boost%401.76.rb > /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/b/boost@1.76.rb
sed -i '' -e 's#https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2#https://archives.boost.io/release/1.76.0/source/boost_1_76_0.tar.bz2#' /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/b/boost@1.76.rb
brew install \
icu4c@74 \
boost@1.76 \
automake \
git \
nasm \
tbb \
texinfo \
zlib
- name: Setup PkgConfig
if: startsWith(matrix.os, 'windows-')
run: choco install pkgconfiglite -y
- name: Setup CMake
uses: ssrobins/install-cmake@v1
with:
version: 3.31.6
- name: Setup Perl
uses: shogo82148/actions-setup-perl@v1.36.0
- name: Checkout code
uses: actions/checkout@v2
- name: Build Dependencies on Windows
if: startsWith(matrix.os, 'windows-')
shell: cmd
run: |
set CMAKE_TLS_VERIFY=0
cd deps
mkdir build
cd build
mkdir QIDIStudio_dep
cmake ../ -G "Visual Studio 17 2022" -DDESTDIR="./QIDIStudio_dep" -DCMAKE_BUILD_TYPE=Release
msbuild /m ALL_BUILD.vcxproj
- name: Build QIDI Studio on Windows
if: startsWith(matrix.os, 'windows-')
shell: cmd
run: |
mkdir install_dir
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -DQDT_RELEASE_TO_PUBLIC=0 -DCMAKE_PREFIX_PATH="${{ github.workspace }}\deps\build\QIDIStudio_dep\usr\local" -DCMAKE_INSTALL_PREFIX="../install_dir" -DCMAKE_BUILD_TYPE=Release -DWIN10SDK_PATH="C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0"
cmake --build . --target install --config Release
- name: Build QIDI Studio on Linux
if: startsWith(matrix.os, 'ubuntu-')
run: |
export CMAKE_TLS_VERIFY=0
sed -i "s/-DQDT_INTERNAL_TESTING=0/-DQDT_INTERNAL_TESTING=1 -DQDT_RELEASE_TO_PUBLIC=0/" BuildLinux.sh
chmod +x BuildLinux.sh
./BuildLinux.sh -dsi
- name: Build QIDI Studio on MacOS
if: startsWith(matrix.os, 'macos-')
run: |
export CMAKE_TLS_VERIFY=0
export PATH="/usr/local/opt/curl/bin:$PATH"
export PATH="/usr/local/opt/icu4c@78/bin:$PATH"
export PATH="/usr/local/opt/icu4c@78/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/curl/lib -L/usr/local/opt/boost@1.76/lib -L/usr/local/opt/icu4c@78/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/zstd/lib"
export CPPFLAGS="-I/usr/local/opt/curl/include -I/usr/local/opt/boost@1.76/include -I/usr/local/opt/icu4c@78/include -I/usr/local/opt/zlib/include -I/usr/local/opt/zstd/include"
export PKG_CONFIG_PATH="/usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/boost@1.76/lib/pkgconfig:/usr/local/opt/icu4c@78/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig://usr/local/opt/zstd/lib/pkgconfig"
export CMAKE_PREFIX_PATH="/usr/local/opt/boost@1.76;/usr/local/opt/curl;/usr/local/opt/icu4c@78"
sed -i '' -e 's/-DCMAKE_PREFIX_PATH="$DEPS/-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH;$DEPS/' BuildMac.sh
sed -i '' -e 's/-DQDT_INTERNAL_TESTING=0/-DQDT_INTERNAL_TESTING=1/' BuildMac.sh
sed -i '' -e 's/-DQDT_RELEASE_TO_PUBLIC=1/-DQDT_RELEASE_TO_PUBLIC=0/' BuildMac.sh
chmod +x BuildMac.sh
./BuildMac.sh -t 14.0 -x
- name: Upload Artifacts on Windows
if: startsWith(matrix.os, 'windows-')
uses: actions/upload-artifact@v5.0.0
with:
name: QIDIStudio_windows
path: install_dir
- name: Upload Artifacts on MacOS
if: startsWith(matrix.os, 'macos-')
uses: actions/upload-artifact@v5.0.0
with:
name: QIDIStudio_macos
path: build/x86_64/QIDIStudio/QIDIStudio.app/
- name: Upload Artifacts on Linux
if: startsWith(matrix.os, 'ubuntu-')
uses: actions/upload-artifact@v5.0.0
with:
name: QIDIStudio_linux
path: build/QIDIStudio.tar
- name: Upload Artifacts on Linux - Appimage
if: startsWith(matrix.os, 'ubuntu-')
uses: actions/upload-artifact@v5.0.0
with:
name: QIDIStudio_AppImage
path: build/QIDIStudio_ubu64.AppImage

6
.gitignore vendored
View File

@@ -1,6 +1,7 @@
Build Build
Build.bat Build.bat
/build/ /build/
/build2/
/build2022/ /build2022/
deps/build deps/build
MYMETA.json MYMETA.json
@@ -27,3 +28,8 @@ SVG
**/process_full/ **/process_full/
**/machine_full/ **/machine_full/
**/filament_full/ **/filament_full/
.idea/
test.js
/.cache/
.clangd
/src/slic3r/QIDI/

View File

@@ -84,17 +84,26 @@ fi
DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release) DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release)
VERSION=$(awk -F= '/^VERSION_ID=/ {print $2}' /etc/os-release) VERSION=$(awk -F= '/^VERSION_ID=/ {print $2}' /etc/os-release)
# treat ubuntu as debian # OSLIKE is a space-delineated list of similar distributions
if [ "${DISTRIBUTION}" == "ubuntu" ] OSLIKE=$(awk -F= '/^ID_LIKE=/ {print $2}' /etc/os-release | tr -d '"')
then
DISTRIBUTION="debian" # Iterate over a list of candidate distribution targets, first match is used
fi for CANDIDATE in ${DISTRIBUTION} ${OSLIKE}; do
if [ ! -f ./linux.d/${DISTRIBUTION} ] if [ -f ./linux.d/${CANDIDATE} ]
then
TARGET_DISTRO="${CANDIDATE}"
break
fi
done
if [ -z ${TARGET_DISTRO} ]
then then
echo "Your distribution does not appear to be currently supported by these build scripts" echo "Your distribution does not appear to be currently supported by these build scripts"
exit 1 exit 1
fi fi
source ./linux.d/${DISTRIBUTION}
echo "OS distribution is '${DISTRIBUTION}'. Using package dependencies for '${TARGET_DISTRO}'."
source ./linux.d/${TARGET_DISTRO}
echo "FOUND_GTK3=${FOUND_GTK3}" echo "FOUND_GTK3=${FOUND_GTK3}"
if [[ -z "${FOUND_GTK3_DEV}" ]] if [[ -z "${FOUND_GTK3_DEV}" ]]

244
BuildMac.sh Normal file
View File

@@ -0,0 +1,244 @@
#!/bin/bash
set -e
set -o pipefail
while getopts "1dpa:st:xbc:h" opt; do
case "${opt}" in
d )
export BUILD_TARGET="deps"
;;
p )
export PACK_DEPS="1"
;;
a )
export ARCH="$OPTARG"
;;
s )
export BUILD_TARGET="slicer"
;;
t )
export OSX_DEPLOYMENT_TARGET="$OPTARG"
;;
x )
export SLICER_CMAKE_GENERATOR="Ninja"
export SLICER_BUILD_TARGET="all"
export DEPS_CMAKE_GENERATOR="Ninja"
;;
b )
export BUILD_ONLY="1"
;;
c )
export BUILD_CONFIG="$OPTARG"
;;
1 )
export CMAKE_BUILD_PARALLEL_LEVEL=1
;;
h ) echo "Usage: ./BuildMac.sh [-1][-d][-s][-x][-b][-c]"
echo " -d: Build deps"
echo " -a: Set ARCHITECTURE (arm64 or x86_64 or universal)"
echo " -s: Build slicer only"
echo " -t: Specify minimum version of the target platform, default is 10.15"
echo " -x: Use Ninja CMake generator, default is Xcode"
echo " -b: Build without reconfiguring CMake"
echo " -c: Set CMake build configuration, default is Release"
echo " -1: limit builds to 1 core (where possible)"
exit 0
;;
* )
;;
esac
done
if [ -z "$ARCH" ]; then
ARCH="$(uname -m)"
export ARCH
fi
if [ -z "$BUILD_CONFIG" ]; then
export BUILD_CONFIG="Release"
fi
if [ -z "$BUILD_TARGET" ]; then
export BUILD_TARGET="all"
fi
if [ -z "$SLICER_CMAKE_GENERATOR" ]; then
export SLICER_CMAKE_GENERATOR="Xcode"
fi
if [ -z "$SLICER_BUILD_TARGET" ]; then
export SLICER_BUILD_TARGET="ALL_BUILD"
fi
if [ -z "$DEPS_CMAKE_GENERATOR" ]; then
export DEPS_CMAKE_GENERATOR="Unix Makefiles"
fi
if [ -z "$OSX_DEPLOYMENT_TARGET" ]; then
export OSX_DEPLOYMENT_TARGET="10.15"
fi
echo "Build params:"
echo " - ARCH: $ARCH"
echo " - BUILD_CONFIG: $BUILD_CONFIG"
echo " - BUILD_TARGET: $BUILD_TARGET"
echo " - CMAKE_GENERATOR: $SLICER_CMAKE_GENERATOR for Slicer, $DEPS_CMAKE_GENERATOR for deps"
echo " - OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET"
echo " - CMAKE_BUILD_PARALLEL_LEVEL: $CMAKE_BUILD_PARALLEL_LEVEL"
echo
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_BUILD_DIR="$PROJECT_DIR/build/$ARCH"
DEPS_DIR="$PROJECT_DIR/deps"
DEPS_BUILD_DIR="$DEPS_DIR/build/$ARCH"
DEPS="$DEPS_BUILD_DIR/QIDIStudio_deps"
if [ "$SLICER_CMAKE_GENERATOR" == "Xcode" ]; then
export BUILD_DIR_CONFIG_SUBDIR="/$BUILD_CONFIG"
else
export BUILD_DIR_CONFIG_SUBDIR=""
fi
function build_deps() {
# iterate over two architectures: x86_64 and arm64
for _ARCH in x86_64 arm64; do
# if ARCH is universal or equal to _ARCH
if [ "$ARCH" == "universal" ] || [ "$ARCH" == "$_ARCH" ]; then
PROJECT_BUILD_DIR="$PROJECT_DIR/build/$_ARCH"
DEPS_BUILD_DIR="$DEPS_DIR/build/$_ARCH"
DEPS="$DEPS_BUILD_DIR/QIDIStudio_deps"
echo "Building deps..."
(
set -x
mkdir -p "$DEPS"
cd "$DEPS_BUILD_DIR"
if [ "1." != "$BUILD_ONLY". ]; then
cmake "${DEPS_DIR}" \
-G "${DEPS_CMAKE_GENERATOR}" \
-DDESTDIR="$DEPS" \
-DOPENSSL_ARCH="darwin64-${_ARCH}-cc" \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_OSX_ARCHITECTURES:STRING="${_ARCH}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
fi
cmake --build . --parallel ${CMAKE_BUILD_PARALLEL_LEVEL} --config "$BUILD_CONFIG" --target deps
)
fi
done
}
function pack_deps() {
echo "Packing deps..."
(
set -x
cd "$DEPS_DIR"
tar -zcvf "QIDIStudio_dep_mac_${ARCH}_$(date +"%Y%m%d").tar.gz" "build"
)
}
function build_slicer() {
# iterate over two architectures: x86_64 and arm64
for _ARCH in x86_64 arm64; do
# if ARCH is universal or equal to _ARCH
if [ "$ARCH" == "universal" ] || [ "$ARCH" == "$_ARCH" ]; then
PROJECT_BUILD_DIR="$PROJECT_DIR/build/$_ARCH"
DEPS_BUILD_DIR="$DEPS_DIR/build/$_ARCH"
DEPS="$DEPS_BUILD_DIR/QIDIStudio_deps"
echo "Building slicer for $_ARCH..."
(
set -x
mkdir -p "$PROJECT_BUILD_DIR"
cd "$PROJECT_BUILD_DIR"
if [ "1." != "$BUILD_ONLY". ]; then
cmake "${PROJECT_DIR}" \
-G "${SLICER_CMAKE_GENERATOR}" \
-DQDT_RELEASE_TO_PUBLIC=1 \
-DQDT_INTERNAL_TESTING=0 \
-DCMAKE_PREFIX_PATH="$DEPS/usr/local" \
-DCMAKE_INSTALL_PREFIX="$PWD/QIDIStudio" \
-DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \
-DCMAKE_MACOSX_RPATH=ON \
-DCMAKE_INSTALL_RPATH="${DEPS}/usr/local" \
-DCMAKE_MACOSX_BUNDLE=ON \
-DCMAKE_OSX_ARCHITECTURES="${_ARCH}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${OSX_DEPLOYMENT_TARGET}"
fi
cmake --build . --config "$BUILD_CONFIG" --target "$SLICER_BUILD_TARGET"
)
echo "Fix macOS app package..."
(
cd "$PROJECT_BUILD_DIR"
mkdir -p QIDIStudio
cd QIDIStudio
# remove previously built app
rm -rf ./QIDIStudio.app
# fully copy newly built app
cp -pR "../src$BUILD_DIR_CONFIG_SUBDIR/QIDIStudio.app" ./QIDIStudio.app
# fix resources
resources_path=$(readlink ./QIDIStudio.app/Contents/Resources)
rm ./QIDIStudio.app/Contents/Resources
cp -R "$resources_path" ./QIDIStudio.app/Contents/Resources
# delete .DS_Store file
find ./QIDIStudio.app/ -name '.DS_Store' -delete
)
fi
done
}
function build_universal() {
echo "Building universal binary..."
PROJECT_BUILD_DIR="$PROJECT_DIR/build/$ARCH"
# Create universal binary
echo "Creating universal binary..."
# PROJECT_BUILD_DIR="$PROJECT_DIR/build_Universal"
mkdir -p "$PROJECT_BUILD_DIR/QIDIStudio"
UNIVERSAL_APP="$PROJECT_BUILD_DIR/QIDIStudio/QIDIStudio.app"
rm -rf "$UNIVERSAL_APP"
cp -R "$PROJECT_DIR/build/arm64/QIDIStudio/QIDIStudio.app" "$UNIVERSAL_APP"
# Get the binary path inside the .app bundle
BINARY_PATH="Contents/MacOS/QIDIStudio"
# Create universal binary using lipo
lipo -create \
"$PROJECT_DIR/build/x86_64/QIDIStudio/QIDIStudio.app/$BINARY_PATH" \
"$PROJECT_DIR/build/arm64/QIDIStudio/QIDIStudio.app/$BINARY_PATH" \
-output "$UNIVERSAL_APP/$BINARY_PATH"
echo "Universal binary created at $UNIVERSAL_APP"
}
case "${BUILD_TARGET}" in
all)
build_deps
build_slicer
;;
deps)
build_deps
;;
slicer)
build_slicer
;;
*)
echo "Unknown target: $BUILD_TARGET. Available targets: deps, slicer, all."
exit 1
;;
esac
if [ "$ARCH" = "universal" ] && [ "$BUILD_TARGET" != "deps" ]; then
build_universal
fi
if [ "1." == "$PACK_DEPS". ]; then
pack_deps
fi

View File

@@ -1,4 +1,10 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
# The CMake version on Windows must not be greater than 4.0.
if ( ((MSVC) OR (WIN32)) AND (${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0") )
message(FATAL_ERROR "Only cmake versions between 3.13.x and 4.0.x is supported on windows. Detected version: ${CMAKE_VERSION}")
endif()
project(QIDIStudio) project(QIDIStudio)
include("version.inc") include("version.inc")
@@ -44,6 +50,7 @@ set(IS_CROSS_COMPILE FALSE)
set(FLATPAK FALSE CACHE BOOL "Not copy FFMPEG file") set(FLATPAK FALSE CACHE BOOL "Not copy FFMPEG file")
if (APPLE) if (APPLE)
set(CMAKE_FIND_FRAMEWORK LAST) set(CMAKE_FIND_FRAMEWORK LAST)
set(CMAKE_FIND_APPBUNDLE LAST) set(CMAKE_FIND_APPBUNDLE LAST)
@@ -54,7 +61,10 @@ if (APPLE)
if (CMAKE_MACOSX_BUNDLE) if (CMAKE_MACOSX_BUNDLE)
set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks) set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks)
endif() endif()
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE)
endif ()
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_INSTALL_RPATH "$ORIGIN") set(CMAKE_INSTALL_RPATH "$ORIGIN")
endif () endif ()
@@ -170,6 +180,18 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory. # WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory.
# We pick it from environment if it is not defined in another way # We pick it from environment if it is not defined in another way
if(WIN32) if(WIN32)
if(EXISTS "${CMAKE_SOURCE_DIR}/scripts/hooks/pre-commit" AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
if(IS_DIRECTORY "${CMAKE_SOURCE_DIR}/.git")
message(STATUS ".git: directory")
configure_file(
"${CMAKE_SOURCE_DIR}/scripts/hooks/pre-commit"
"${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit"
)
else()
message(STATUS "skip pre-commit git hook")
endif()
endif()
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
if(NOT DEFINED WIN10SDK_PATH) if(NOT DEFINED WIN10SDK_PATH)
if(DEFINED ENV{WIN10SDK_PATH}) if(DEFINED ENV{WIN10SDK_PATH})
@@ -238,6 +260,8 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP
# On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error.
add_compile_options(-Werror=return-type) add_compile_options(-Werror=return-type)
# add_compile_options(-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-label -Wno-unused-local-typedefs)
# removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1) # removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1)
# https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221 # https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0)
@@ -251,6 +275,10 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP
add_compile_options(-Wno-deprecated-declarations) add_compile_options(-Wno-deprecated-declarations)
endif() endif()
if((${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang") AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15)
add_compile_options(-Wno-error=enum-constexpr-conversion)
endif()
#GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see #GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431
@@ -305,7 +333,7 @@ if(WIN32)
add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS) add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
if(MSVC) if(MSVC)
# BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking. # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking.
add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -DBOOST_SYSTEM_USE_UTF8 ) add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x602 -DBOOST_SYSTEM_USE_UTF8 )
# Force the source code encoding to UTF-8. See QIDIStudio GH pull request #5583 # Force the source code encoding to UTF-8. See QIDIStudio GH pull request #5583
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
@@ -347,7 +375,7 @@ endif()
# set(Boost_COMPILER "-mgw81") # set(Boost_COMPILER "-mgw81")
# boost::process was introduced first in version 1.64.0, # boost::process was introduced first in version 1.64.0,
# boost::beast::detail::base64 was introduced first in version 1.66.0 # boost::beast::detail::base64 was introduced first in version 1.66.0
set(MINIMUM_BOOST_VERSION "1.66.0") set(MINIMUM_BOOST_VERSION "1.83.0")
set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams") set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams")
find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components}) find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components})
@@ -504,7 +532,7 @@ find_package(cereal REQUIRED)
set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n") set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/i18n")
set(QDT_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qdt/i18n") set(QDT_L18N_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qdt/i18n")
add_custom_target(gettext_make_pot add_custom_target(gettext_make_pot
COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost COMMAND xgettext --keyword=L --no-wrap --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --no-location --debug --boost
-f "${QDT_L18N_DIR}/list.txt" -f "${QDT_L18N_DIR}/list.txt"
-o "${QDT_L18N_DIR}/QIDIStudio.pot" -o "${QDT_L18N_DIR}/QIDIStudio.pot"
COMMAND hintsToPot ${SLIC3R_RESOURCES_DIR} ${QDT_L18N_DIR} COMMAND hintsToPot ${SLIC3R_RESOURCES_DIR} ${QDT_L18N_DIR}
@@ -521,7 +549,7 @@ foreach(po_file ${QDT_L10N_PO_FILES})
SET(po_new_file "${po_dir}/QIDIStudio_.po") SET(po_new_file "${po_dir}/QIDIStudio_.po")
add_custom_command( add_custom_command(
TARGET gettext_merge_po_with_pot PRE_BUILD TARGET gettext_merge_po_with_pot PRE_BUILD
COMMAND msgmerge -N -o ${po_file} ${po_file} "${QDT_L18N_DIR}/QIDIStudio.pot" COMMAND msgmerge --no-wrap -N -o ${po_file} ${po_file} "${QDT_L18N_DIR}/QIDIStudio.pot"
DEPENDS ${po_file} DEPENDS ${po_file}
) )
endforeach() endforeach()
@@ -543,12 +571,12 @@ foreach(po_file ${QDT_L10N_PO_FILES})
endforeach() endforeach()
# copy pt-BR/QidiStudio.mo to pt_br/ # copy pt-BR/QidiStudio.mo to pt_br/
SET(PT_BR "${L10N_DIR}/pt-BR/QIDIStudio.mo") #SET(PT_BR "${L10N_DIR}/pt-BR/QIDIStudio.mo")
SET(PT_BR_DST "${L10N_DIR}/pt_br/") #SET(PT_BR_DST "${L10N_DIR}/pt_br/")
add_custom_command( #add_custom_command(
TARGET gettext_po_to_mo POST_BUILD # TARGET gettext_po_to_mo POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PT_BR} ${PT_BR_DST} # COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PT_BR} ${PT_BR_DST}
) #)
find_package(NLopt 1.4 REQUIRED) find_package(NLopt 1.4 REQUIRED)

View File

@@ -1,15 +1,73 @@
#!/bin/bash #!/bin/bash
PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)") PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
set -x set -e
# Wishlist hint: For developers, creating a Docker Compose function usage() {
# setup with persistent volumes for the build & deps directories echo "Usage: ./DockerBuild.sh [-c][-d][-i][-v]"
# would speed up recompile times significantly. For end users, echo " -c: Build a self-contained Docker image that can be run directly"
# the simplicity of a single Docker image and a one-time compilation echo " -d: disable safe parallel number limit(By default, the maximum number of parallels is set to free memory/2.5)"
# seems better. echo " -i: Build and export an AppImage"
docker build -t qidistudio \ echo " -v: Build System Version:ubu22 or ubu24"
--build-arg USER=$USER \ echo " -h: this help output"
--build-arg UID=$(id -u) \ echo "If you only need to run the program on a built Docker container, just use './DockerBuild.sh -c'"
--build-arg GID=$(id -g) \ echo "If you need to build an AppImage using Docker, first run './DockerBuild.sh -d', then run './DockerBuild.sh -s'."
$PROJECT_ROOT }
unset name
while getopts "hcdiv:" opt; do
case ${opt} in
c )
BUILD_RUNNER=1
;;
d )
BUILD_DEPS=1
;;
i )
BUILD_APPIMAGE=1
;;
v )
SYSTEM_VERSION="$OPTARG"
;;
h ) usage
exit 0
;;
esac
done
if [ -z "$SYSTEM_VERSION" ]; then
SYSTEM_VERSION="ubu22"
fi
if [[ -n "${BUILD_DEPS}" ]]; then
if [ "$SYSTEM_VERSION" == "ubu22" ]; then
echo "Building dependencies for Ubuntu 22.04..."
docker build -f docker/BuildDepsDockerfile -t studio_dep_22:1.0 .
else
docker build -f docker/BuildDepsDockerfile24 -t studio_dep_24:1.0 .
fi
fi
if [[ -n "${BUILD_APPIMAGE}" ]]; then
if [ "$SYSTEM_VERSION" == "ubu22" ]; then
docker build -f docker/BuildAppimageDockerfile --build-arg VERSION=studio_dep_22 -o type=local,dest=./build .
mv build/QIDIStudio_ubu64.AppImage build/QIDIStudio_ubu22.AppImage
else
docker build -f docker/BuildAppimageDockerfile --build-arg VERSION=studio_dep_24 -o type=local,dest=./build .
mv build/QIDIStudio_ubu64.AppImage build/QIDIStudio_ubu24.AppImage
fi
fi
if [[ -n "${BUILD_RUNNER}" ]]
then
# Wishlist hint: For developers, creating a Docker Compose
# setup with persistent volumes for the build & deps directories
# would speed up recompile times significantly. For end users,
# the simplicity of a single Docker image and a one-time compilation
# seems better.
docker build -t qidistudio \
--build-arg USER=${USER:-root} \
--build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \
$PROJECT_ROOT
fi

81
DockerEntrypoint.sh Normal file
View File

@@ -0,0 +1,81 @@
#!/bin/bash
# Entrypoint script to create an out-of-the-box experience for QIDIStudio.
# Perform some initial setup if none was done previously.
# It is not necessary if you know what you are doing. Feel free to go
# to the Dockerfile and switch the entrypoint to the QIDIStudio binary.
# Check if the current effective user is root
if [ "$EUID" -eq 0 ]; then
echo "No User specified at build time."
if [ -z "$RUN_USER" ] || [ -z "$RUN_UID" ] || [ -z "$RUN_GID" ] || [ "$RUN_UID" -eq 0 ]; then
echo "At least one of RUN_USER, RUN_UID, or RUN_GID is unset. Or 'root' was requested."
echo "Running as root"
if [ "$HOME" != "/root" ]; then
if [ ! -d "/root" ]; then
mkdir /root
chown root:root /root
chmod 700 /root
fi
fi
export HOME="/root"
EXEC_USER="root"
else
echo "Setting up a new user"
# Check if there is a already a valid user entry for the passed UID, if not create one
if [ -z "$(getent passwd "$RUN_UID" | cut -d: -f1)" ]; then
#GID=$(id -g)
echo "User specified at runtime. Performing setup."
groupadd -g "$RUN_GID" "$RUN_USER"
useradd -u "$RUN_UID" -g "$RUN_GID" -d "/home/$RUN_USER" "$RUN_USER"
usermod -aG sudo "$RUN_USER"
passwd -d "$RUN_USER"
#This will take forever to run, so we will just chown the build folder which contains the binaries
#chown -R "$RUN_UID":"$RUN_GID" /QIDIStudio
chown "$RUN_UID":"$RUN_GID" /QIDIStudio
chown -R "$RUN_UID":"$RUN_GID" /QIDIStudio/build
export HOME="/home/$RUN_USER"
EXEC_USER="$RUN_USER"
fi
fi
else
echo "User specified at build time."
CURRENT_USER=$(id -un)
if [ -n "$RUN_USER" ] && [ -n "$RUN_UID" ] && [ -n "$RUN_GID" ] && [ "$RUN_UID" -ne "$EUID" ]; then
echo "New User config passed at Runtime. Setting up."
if [ -z "$(getent passwd "$RUN_UID" | cut -d: -f1)" ]; then
sudo groupadd -g "$RUN_UID" "$RUN_USER"
sudo useradd -u "$RUN_UID" -g "$RUN_GID" -d "/home/$RUN_USER" "$RUN_USER"
sudo usermod -aG sudo "$RUN_USER"
passwd -d "$RUN_USER"
#sudo chown -R "$RUN_UID":"$RUN_GID" /QIDIStudio
chown "$RUN_UID":"$RUN_GID" /QIDIStudio
chown -R "$RUN_UID":"$RUN_GID" /QIDIStudio/build
export HOME="/home/$RUN_USER"
EXEC_USER="$RUN_USER"
fi
else
echo "Using Build time user."
EXEC_USER="$CURRENT_USER"
#It should've been set in Dockerfile, but just in case, uncomment this it there is problem
#export HOME="/home/$USER"
fi
fi
# make sure ~/.config folder exists so QIDI Studio will start
if [ ! -d "$HOME/.config" ]; then
mkdir -p "$HOME/.config"
fi
# Using su $USER -c will retain all the important ENV args when qidi Studio starts in a different shell
# Continue with QIDI Studio using correct user, passing all arguments
exec su "$EXEC_USER" -c "/QIDIStudio/build/package/bin/qidi-studio $*"

View File

@@ -5,15 +5,24 @@ set -x
# -h $HOSTNAME \ # -h $HOSTNAME \
# If there's problems with the X display, try this # If there's problems with the X display, try this
# -v /tmp/.X11-unix:/tmp/.X11-unix \ # -v /tmp/.X11-unix:/tmp/.X11-unix \
# or
# -v $HOME/.Xauthority:/root/.Xauthority \
# You also need to run "xhost +" on your host system
# QIDI Studio also require the parent directory for the configuration directory to be present to start
# to prevent your local machines's QIDI studio config passed to docker container when you map your home directory, add:
# -v :SHOME/.config/QIDIStudio
set -x
docker run \ docker run \
`# Use the hosts networking. Printer wifi and also dbus communication` \ `# Use the hosts networking. Printer wifi and also dbus communication` \
--net=host \ --net=host \
`# Some X installs will not have permissions to talk to sockets for shared memory` \ `# Some X installs will not have permissions to talk to sockets for shared memory` \
--ipc host \ --ipc host \
`# Run as your workstations username to keep permissions the same` \
-u $USER \
`# Bind mount your home directory into the container for loading/saving files` \ `# Bind mount your home directory into the container for loading/saving files` \
-v $HOME:/home/$USER \ -v $HOME:$HOME \
`# Pass some X Auth file to allow x11 to connect to your host x instance` \
-v $HOME/.Xauthority:/tmp/.Xauthority \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e XAUTHORITY=/tmp/.Xauthority \
`# Pass the X display number to the container` \ `# Pass the X display number to the container` \
-e DISPLAY=$DISPLAY \ -e DISPLAY=$DISPLAY \
`# It seems that libGL and dbus things need privileged mode` \ `# It seems that libGL and dbus things need privileged mode` \
@@ -24,4 +33,3 @@ docker run \
--rm \ --rm \
`# Pass all parameters from this script to the qidi ENTRYPOINT binary` \ `# Pass all parameters from this script to the qidi ENTRYPOINT binary` \
qidistudio $* qidistudio $*

View File

@@ -1,5 +1,4 @@
FROM docker.io/ubuntu:22.04 FROM docker.io/ubuntu:24.10
LABEL maintainer "DeftDawg <DeftDawg@gmail.com>"
# Disable interactive package configuration # Disable interactive package configuration
RUN apt-get update && \ RUN apt-get update && \
@@ -14,6 +13,7 @@ RUN apt-get update && apt-get install -y \
build-essential \ build-essential \
cmake \ cmake \
curl \ curl \
xvfb \
eglexternalplatform-dev \ eglexternalplatform-dev \
extra-cmake-modules \ extra-cmake-modules \
file \ file \
@@ -39,7 +39,6 @@ RUN apt-get update && apt-get install -y \
libssl-dev \ libssl-dev \
libudev-dev \ libudev-dev \
libwayland-dev \ libwayland-dev \
libwebkit2gtk-4.0-dev \
libxkbcommon-dev \ libxkbcommon-dev \
locales \ locales \
locales-all \ locales-all \
@@ -47,6 +46,7 @@ RUN apt-get update && apt-get install -y \
pkgconf \ pkgconf \
sudo \ sudo \
wayland-protocols \ wayland-protocols \
libwebkit2gtk-4.1-dev \
wget wget
# Change your locale here if you want. See the output # Change your locale here if you want. See the output
@@ -58,14 +58,55 @@ RUN locale-gen $LC_ALL
# the CA cert path on every startup # the CA cert path on every startup
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
COPY ./ QIDIStudio COPY ./ /QIDIStudio
WORKDIR QIDIStudio RUN chmod +x /QIDIStudio/DockerEntrypoint.sh
# These can run together, but we run them seperate for podman caching WORKDIR /QIDIStudio
# Update System dependencies
# Ubuntu 24 Docker Image now come with default standard user "ubuntu"
# It might conflict with your mapped user, remove if user ubuntu exist
RUN if id "ubuntu" >/dev/null 2>&1; then userdel -r ubuntu; fi
# It's easier to run QIDI Studio as the same username,
# UID and GID as your workstation. Since we bind mount
# your home directory into the container, it's handy
# to keep permissions the same. Just in case, defaults
# are root.
# Set ARG values
# If user was passed from build it will create a user same
# as your workstation. Else it will use /root
# Setting ARG at build time is convienient for testing purposes
# otherwise the same commands will be executed at runtime
ARG USER=root
ARG UID=0
ARG GID=0
RUN if [ "$UID" != "0" ]; then \
groupadd -g $GID $USER && \
useradd -u $UID -g $GID -m -d /home/$USER $USER && \
mkdir -p /home/$USER && \
chown -R $UID:$GID /QIDIStudio && \
usermod -aG sudo $USER && \
passwd -d "$USER"; \
else \
mkdir -p /root/.config; \
fi
# Allow password-less sudo for ALL users
RUN echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/999-passwordless
RUN chmod 440 /etc/sudoers.d/999-passwordless
# Update System dependencies(Run before user switch)
RUN ./BuildLinux.sh -u RUN ./BuildLinux.sh -u
# Run as the mapped user (or root by default)
USER $USER
# These can run together, but we run them seperate for podman caching
# Build dependencies in ./deps # Build dependencies in ./deps
RUN ./BuildLinux.sh -d RUN ./BuildLinux.sh -d
@@ -73,22 +114,20 @@ RUN ./BuildLinux.sh -d
RUN ./BuildLinux.sh -s RUN ./BuildLinux.sh -s
# Build AppImage # Build AppImage
ENV container podman ENV container=podman
RUN ./BuildLinux.sh -i RUN ./BuildLinux.sh -i
# It's easier to run QIDI Studio as the same username,
# UID and GID as your workstation. Since we bind mount # Use bash as the shell
# your home directory into the container, it's handy
# to keep permissions the same. Just in case, defaults
# are root.
SHELL ["/bin/bash", "-l", "-c"] SHELL ["/bin/bash", "-l", "-c"]
ARG USER=root
ARG UID=0 # Point FFMPEG Library search to the binary built upon QIDIStudio build time
ARG GID=0 ENV LD_LIBRARY_PATH=/QIDIStudio/build/package/bin
RUN [[ "$UID" != "0" ]] \
&& groupadd -f -g $GID $USER \
&& useradd -u $UID -g $GID $USER
# Using an entrypoint instead of CMD because the binary # Using an entrypoint instead of CMD because the binary
# accepts several command line arguments. # accepts several command line arguments.
ENTRYPOINT ["/QIDIStudio/build/package/bin/qidi-studio"] # entrypoint script will pass all arguments to QIDI-studio
# after the script finishes
#ENTRYPOINT ["/QIDIStudio/build/package/bin/QIDI-studio"]
ENTRYPOINT ["/QIDIStudio/DockerEntrypoint.sh"]

View File

@@ -2,30 +2,35 @@
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>English</string> <string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string> <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key> <key>CFBundleGetInfoString</key>
<string>${MACOSX_BUNDLE_INFO_STRING}</string> <string>${MACOSX_BUNDLE_INFO_STRING}</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>${MACOSX_BUNDLE_ICON_FILE}</string> <string>${MACOSX_BUNDLE_ICON_FILE}</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.qiditech.qidi-studio</string> <string>com.qiditech.qidi-studio</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleLongVersionString</key> <key>CFBundleLongVersionString</key>
<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string> <string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string> <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string> <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string> <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict> <dict>

View File

@@ -0,0 +1,127 @@
From 45d9cd6bdba9b829fcfe40ff7c5f3f786afd41e1 Mon Sep 17 00:00:00 2001
From: "changyu.chen" <changyu.chen@bambulab.com>
Date: Fri, 7 Nov 2025 10:15:47 +0800
Subject: [PATCH] FIX: OBS cannot start streaming on MAC
jira: [STUDIO-14205]
Change-Id: I3f7c7982737b3b52729df856bc0cf69d89d1820d
---
.../include/boost/process/detail/posix/executor.hpp | 3 ++-
.../include/boost/process/detail/posix/pipe_out.hpp | 13 +++++++++++--
.../include/boost/process/detail/used_handles.hpp | 3 +++
.../boost/process/detail/windows/handles.hpp | 10 +++++++---
4 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/usr/local/include/boost/process/detail/posix/executor.hpp b/usr/local/include/boost/process/detail/posix/executor.hpp
index c4d99906..4d9b47ba 100644
--- a/usr/local/include/boost/process/detail/posix/executor.hpp
+++ b/usr/local/include/boost/process/detail/posix/executor.hpp
@@ -328,6 +328,7 @@ public:
}
void set_error(const std::error_code &ec, const std::string &msg) {set_error(ec, msg.c_str());};
+ int error_sink() const {return _pipe_sink;}
std::vector<int> get_used_handles() const
{
if (_pipe_sink == -1)
@@ -398,6 +399,7 @@ child executor<Sequence>::invoke(boost::mpl::false_, boost::mpl::false_)
set_error(err, "fcntl(2) failed");//this might throw, so we need to be sure our pipe is safe.
return child();
}
+ _pipe_sink = p.p[1];
_ec.clear();
boost::fusion::for_each(seq, call_on_setup(*this));
@@ -421,7 +423,6 @@ child executor<Sequence>::invoke(boost::mpl::false_, boost::mpl::false_)
}
else if (pid == 0)
{
- _pipe_sink = p.p[1];
::close(p.p[0]);
boost::fusion::for_each(seq, call_on_exec_setup(*this));
diff --git a/usr/local/include/boost/process/detail/posix/pipe_out.hpp b/usr/local/include/boost/process/detail/posix/pipe_out.hpp
index d54cca4e..7a711983 100644
--- a/usr/local/include/boost/process/detail/posix/pipe_out.hpp
+++ b/usr/local/include/boost/process/detail/posix/pipe_out.hpp
@@ -18,7 +18,7 @@
namespace boost { namespace process { namespace detail { namespace posix {
template<int p1, int p2>
-struct pipe_out : handler_base_ext
+struct pipe_out : handler_base_ext, ::boost::process::detail::uses_handles
{
int sink;
int source; //opposite end
@@ -31,6 +31,14 @@ struct pipe_out : handler_base_ext
p.assign_sink(-1);
}
+ std::array<int, 4> get_used_handles()
+ {
+ const auto pp1 = p1 != -1 ? p1 : p2;
+ const auto pp2 = p2 != -1 ? p2 : p1;
+
+ return {sink, source, pp1, pp2};
+ }
+
template<typename Executor>
void on_error(Executor &, const std::error_code &) const
{
@@ -66,7 +74,7 @@ void pipe_out<2,-1>::on_exec_setup(Executor &e) const
if (::dup2(sink, STDERR_FILENO) == -1)
e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
- if (sink != STDOUT_FILENO)
+ if (sink != STDERR_FILENO)
::close(sink);
::close(source);
}
@@ -81,6 +89,7 @@ void pipe_out<1,2>::on_exec_setup(Executor &e) const
e.set_error(::boost::process::detail::get_last_error(), "dup2() failed");
if ((sink != STDOUT_FILENO) && (sink != STDERR_FILENO))
::close(sink);
+ ::close(source);
}
class async_pipe;
diff --git a/usr/local/include/boost/process/detail/used_handles.hpp b/usr/local/include/boost/process/detail/used_handles.hpp
index 8db226d4..b7dc13d0 100644
--- a/usr/local/include/boost/process/detail/used_handles.hpp
+++ b/usr/local/include/boost/process/detail/used_handles.hpp
@@ -61,6 +61,9 @@ struct foreach_handle_invocator
template<typename Executor, typename Function>
void foreach_used_handle(Executor &exec, Function &&func)
{
+#if defined(BOOST_POSIX_API)
+ func(exec.error_sink());
+#endif
boost::fusion::for_each(boost::fusion::filter_if<does_use_handle<boost::mpl::_>>(exec.seq),
foreach_handle_invocator<Function>(func));
}
diff --git a/usr/local/include/boost/process/detail/windows/handles.hpp b/usr/local/include/boost/process/detail/windows/handles.hpp
index 901b339a..da78b1ce 100644
--- a/usr/local/include/boost/process/detail/windows/handles.hpp
+++ b/usr/local/include/boost/process/detail/windows/handles.hpp
@@ -141,10 +141,14 @@ struct limit_handles_ : handler_base_ext
::boost::winapi::DWORD_ flags = 0u;
if (itr != all_handles.end())
*itr = ::boost::winapi::INVALID_HANDLE_VALUE_;
- else if ((::boost::winapi::GetHandleInformation(*itr, &flags) != 0)
- &&((flags & ::boost::winapi::HANDLE_FLAG_INHERIT_) == 0)) //it is NOT inherited anyhow, so ignore too
- *itr = ::boost::winapi::INVALID_HANDLE_VALUE_;
});
+ for (auto& h : all_handles) {
+ ::boost::winapi::DWORD_ flags = 0u;
+ if ((h != ::boost::winapi::INVALID_HANDLE_VALUE_)
+ && (::boost::winapi::GetHandleInformation(h, &flags) != 0)
+ && ((flags & ::boost::winapi::HANDLE_FLAG_INHERIT_) == 0)) //it is NOT inherited anyhow, so ignore too
+ h = ::boost::winapi::INVALID_HANDLE_VALUE_;
+ }
auto part_itr = std::partition(all_handles.begin(), all_handles.end(),
[](::boost::winapi::HANDLE_ handle) {return handle != ::boost::winapi::INVALID_HANDLE_VALUE_;});
--
2.51.2.windows.1

175
deps/Boost/Boost.cmake vendored
View File

@@ -1,160 +1,27 @@
include(ExternalProject)
if (WIN32) set(_context_abi_line "")
set(_bootstrap_cmd bootstrap.bat) set(_context_arch_line "")
set(_build_cmd b2.exe) if (APPLE AND CMAKE_OSX_ARCHITECTURES)
else() if (CMAKE_OSX_ARCHITECTURES MATCHES "x86")
set(_bootstrap_cmd ./bootstrap.sh) set(_context_abi_line "-DBOOST_CONTEXT_ABI:STRING=sysv")
set(_build_cmd ./b2) elseif (CMAKE_OSX_ARCHITECTURES MATCHES "arm")
endif() set (_context_abi_line "-DBOOST_CONTEXT_ABI:STRING=aapcs")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(_boost_toolset gcc)
configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam)
set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html
if (MSVC_VERSION EQUAL 1800)
# 1800 = VS 12.0 (v120 toolset)
set(_boost_toolset "msvc-12.0")
elseif (MSVC_VERSION EQUAL 1900)
# 1900 = VS 14.0 (v140 toolset)
set(_boost_toolset "msvc-14.0")
elseif (MSVC_VERSION LESS 1920)
# 1910-1919 = VS 15.0 (v141 toolset)
set(_boost_toolset "msvc-14.1")
elseif (MSVC_VERSION LESS 1930)
# 1920-1929 = VS 16.0 (v142 toolset)
set(_boost_toolset "msvc-14.2")
elseif (MSVC_VERSION LESS 1950)
# 1930-1949 = VS 17.0 (v143 toolset)
set(_boost_toolset "msvc-14.3")
else ()
message(FATAL_ERROR "Unsupported MSVC version")
endif () endif ()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(_context_arch_line "-DBOOST_CONTEXT_ARCHITECTURE:STRING=${CMAKE_OSX_ARCHITECTURES}")
if (WIN32) message(STATUS "BOOST param: ${_context_abi_line} ${_context_arch_line}")
set(_boost_toolset "clang-win")
elseif (APPLE)
set(_boost_toolset "clang")
else()
set(_boost_toolset clang)
configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam)
set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam)
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(_boost_toolset "intel")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
set(_boost_toolset "clang")
endif()
message(STATUS "Deduced boost toolset: ${_boost_toolset} based on ${CMAKE_CXX_COMPILER_ID} compiler")
set(_libs "")
foreach(_comp ${DEP_Boost_COMPONENTS})
list(APPEND _libs "--with-${_comp}")
endforeach()
if (BUILD_SHARED_LIBS)
set(_link shared)
else()
set(_link static)
endif()
set(_bits "")
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(_bits 64)
elseif ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(_bits 32)
endif () endif ()
include(ProcessorCount) qidistudio_add_cmake_project(Boost
ProcessorCount(NPROC) URL "https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz"
file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix) URL_HASH SHA256=4d27e9efed0f6f152dc28db6430b9d3dfb40c0345da7342eaa5a987dde57bd95
LIST_SEPARATOR |
set(_boost_flags "") #PATCH_COMMAND git apply --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-FIX-OBS-cannot-start-streaming-on-MAC.patch
if (UNIX) CMAKE_ARGS
set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") -DBOOST_EXCLUDE_LIBRARIES:STRING=contract|fiber|numpy|wave|test
endif () -DBOOST_LOCALE_ENABLE_ICU:BOOL=OFF # do not link to libicu, breaks compatibility between distros
-DBUILD_TESTING:BOOL=OFF
if(APPLE) "${_context_abi_line}"
set(_boost_flags "${_context_arch_line}"
"cflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"
"cxxflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"
"mflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"
"mmflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET}")
endif()
set(_boost_variants "")
if(CMAKE_BUILD_TYPE)
list(APPEND CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE})
list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
endif()
list(FIND CMAKE_CONFIGURATION_TYPES "Release" _cfg_rel)
list(FIND CMAKE_CONFIGURATION_TYPES "RelWithDebInfo" _cfg_relwdeb)
list(FIND CMAKE_CONFIGURATION_TYPES "MinSizeRel" _cfg_minsizerel)
list(FIND CMAKE_CONFIGURATION_TYPES "Debug" _cfg_deb)
if (_cfg_rel GREATER -1 OR _cfg_relwdeb GREATER -1 OR _cfg_minsizerel GREATER -1)
list(APPEND _boost_variants release)
endif()
if ( (NOT MSVC AND _cfg_deb GREATER -1) OR (MSVC AND ${DEP_DEBUG}) )
list(APPEND _boost_variants debug)
endif()
if (NOT _boost_variants)
set(_boost_variants release)
endif()
set(_build_cmd ${_build_cmd}
${_boost_flags}
-j${NPROC}
${_libs}
--layout=versioned
--debug-configuration
toolset=${_boost_toolset}
address-model=${_bits}
link=${_link}
threading=multi
boost.locale.icu=off
--disable-icu
${_boost_variants}
stage)
set(_install_cmd ${_build_cmd} --prefix=${_prefix} install)
list(APPEND _patch_command COMMAND git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-Boost-fix.patch)
ExternalProject_Add(
dep_Boost
#URL "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip"
URL "https://github.com/qiditech/boost/releases/download/1.78.0/boost_1_78_0.zip"
URL_HASH SHA256=f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost
CONFIGURE_COMMAND "${_bootstrap_cmd}"
PATCH_COMMAND ${_patch_command}
BUILD_COMMAND "${_build_cmd}"
BUILD_IN_SOURCE ON
INSTALL_COMMAND "${_install_cmd}"
) )
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") set(DEP_Boost_DEPENDS ZLIB)
# Patch the boost::polygon library with a custom one.
ExternalProject_Add(dep_boost_polygon
EXCLUDE_FROM_ALL ON
# GIT_REPOSITORY "https://github.com/prusa3d/polygon"
# GIT_TAG prusaslicer_gmp
URL https://github.com/prusa3d/polygon/archive/refs/heads/prusaslicer_gmp.zip
URL_HASH SHA256=abeb9710f0a7069fb9b22181ae5c56f6066002f125db210e7ffb27032aed6824
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/boost_polygon
DEPENDS dep_Boost
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_CURRENT_BINARY_DIR}/dep_boost_polygon-prefix/src/dep_boost_polygon/include/boost/polygon"
"${DESTDIR}/usr/local/include/boost/polygon"
)
# Only override boost::Polygon Voronoi implementation with Vojtech's GMP hacks on 64bit platforms.
list(APPEND _dep_list "dep_boost_polygon")
endif ()

59
deps/CGAL/0001-clang19.patch vendored Normal file
View File

@@ -0,0 +1,59 @@
--- a/BGL/include/CGAL/boost/graph/iterator.h 2022-10-07 19:04:41 UTC
+++ b/BGL/include/CGAL/boost/graph/iterator.h
@@ -213,18 +213,7 @@ class Halfedge_around_source_iterator { (public)
{}
#ifndef DOXYGEN_RUNNING
- // design patter: "safe bool"
- // will be replaced by explicit operator bool with C++11
- typedef void (Halfedge_around_source_iterator::*bool_type)() const;
- void this_type_does_not_support_comparisons() const {}
-
- operator bool_type() const
- {
- return (! (this->base() == nullptr)) ?
- &Halfedge_around_source_iterator::this_type_does_not_support_comparisons : 0;
- }
-
bool operator==( const Self& i) const {
CGAL_assertion( anchor == anchor);
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
@@ -313,18 +302,7 @@ class Halfedge_around_target_iterator { (public)
{}
#ifndef DOXYGEN_RUNNING
- // design patter: "safe bool"
- // will be replaced by explicit operator bool with C++11
- typedef void (Halfedge_around_target_iterator::*bool_type)() const;
- void this_type_does_not_support_comparisons() const {}
-
- operator bool_type() const
- {
- return (! (this->base() == nullptr)) ?
- &Halfedge_around_target_iterator::this_type_does_not_support_comparisons : 0;
- }
-
bool operator==( const Self& i) const {
CGAL_assertion( anchor == anchor);
return ( g == i.g) && ( pos == i.pos) && ( winding == i.winding);
@@ -411,18 +389,6 @@ class Halfedge_around_face_iterator { (public)
const value_type& operator * ( ) const { return pos; }
pointer operator -> ( ) { return &pos; }
const value_type* operator -> ( ) const { return &pos; }
-
- // design patter: "safe bool"
- // will be replaced by explicit operator bool with C++11
- typedef void (Halfedge_around_face_iterator::*bool_type)() const;
-
- void this_type_does_not_support_comparisons() const {}
-
- operator bool_type() const
- {
- return (! (this->base() == nullptr)) ?
- &Halfedge_around_face_iterator::this_type_does_not_support_comparisons : 0;
- }
bool operator==( const Self& i) const {
CGAL_assertion( anchor == anchor);

View File

@@ -1,10 +1,12 @@
if (IN_GIT_REPO)
set(CGAL_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_CGAL-prefix/src/dep_CGAL)
endif ()
qidistudio_add_cmake_project( qidistudio_add_cmake_project(
CGAL CGAL
# GIT_REPOSITORY https://github.com/CGAL/cgal.git
# GIT_TAG caacd806dc55c61cc68adaad99f2240f00493b29 # releases/CGAL-5.3
# For whatever reason, this keeps downloading forever (repeats downloads if finished)
URL https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip URL https://github.com/CGAL/cgal/archive/refs/tags/v5.4.zip
URL_HASH SHA256=d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0 URL_HASH SHA256=d7605e0a5a5ca17da7547592f6f6e4a59430a0bc861948974254d0de43eab4c0
PATCH_COMMAND git apply ${CGAL_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-clang19.patch
DEPENDS ${BOOST_PKG} dep_GMP dep_MPFR DEPENDS ${BOOST_PKG} dep_GMP dep_MPFR
) )

41
deps/CMakeLists.txt vendored
View File

@@ -27,6 +27,9 @@ include(ExternalProject)
include(ProcessorCount) include(ProcessorCount)
ProcessorCount(NPROC) ProcessorCount(NPROC)
if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL})
set(NPROC $ENV{CMAKE_BUILD_PARALLEL_LEVEL})
endif()
if (NPROC EQUAL 0) if (NPROC EQUAL 0)
set(NPROC 1) set(NPROC 1)
endif () endif ()
@@ -40,6 +43,7 @@ option(DEP_BUILD_GLFW "Compile GLFW" ON)
option(DEP_BUILD_FREETYPE "Compile freetype" ON) option(DEP_BUILD_FREETYPE "Compile freetype" ON)
option(DEP_BUILD_WXWIDGETS "Compile wxWidgets" ON) option(DEP_BUILD_WXWIDGETS "Compile wxWidgets" ON)
option(DEP_BUILD_FFMPEG "Compile ffmpeg" ON) option(DEP_BUILD_FFMPEG "Compile ffmpeg" ON)
option(DEP_BUILD_WEBSOCKET "Comile websocket" ON)
set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory") set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory")
set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Path for downloaded source packages.") set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Path for downloaded source packages.")
@@ -50,6 +54,24 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF) option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF)
endif() endif()
set(IS_CROSS_COMPILE FALSE)
if (APPLE)
set(CMAKE_FIND_FRAMEWORK LAST)
set(CMAKE_FIND_APPBUNDLE LAST)
list(FIND CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR} _arch_idx)
message(STATUS "qidistudio_add_cmake_project for Apple")
if (CMAKE_OSX_ARCHITECTURES AND _arch_idx LESS 0)
message(STATUS "qidistudio_add_cmake_project for Apple crosscompiling")
set(IS_CROSS_COMPILE TRUE)
set(CMAKE_CXX_COMPILER_ID "Clang")
string(REPLACE ";" "$<SEMICOLON>" CMAKE_OSX_ARCHS "${CMAKE_OSX_ARCHITECTURES}")
set(_cmake_osx_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS})
set(_cmake_args_osx_arch CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS})
message(STATUS "Detect Cross-compilation. Will build for target ${CMAKE_OSX_ARCHS}" )
endif ()
endif ()
# On developer machines, it can be enabled to speed up compilation and suppress warnings coming from IGL. # On developer machines, it can be enabled to speed up compilation and suppress warnings coming from IGL.
# FIXME: # FIXME:
# Enabling this option is not safe. IGL will compile itself with its own version of Eigen while # Enabling this option is not safe. IGL will compile itself with its own version of Eigen while
@@ -72,6 +94,17 @@ if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.") message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.")
endif () endif ()
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree
RESULT_VARIABLE REV_PARSE_RESULT
OUTPUT_VARIABLE REV_PARSE_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if((REV_PARSE_RESULT EQUAL 0) AND (REV_PARSE_OUTPUT STREQUAL "true"))
# Find relative path from root to source used for adjusting patch command
file(RELATIVE_PATH BINARY_DIR_REL ${CMAKE_SOURCE_DIR}/.. ${CMAKE_BINARY_DIR})
endif ()
function(qidistudio_add_cmake_project projectname) function(qidistudio_add_cmake_project projectname)
cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN}) cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
@@ -102,6 +135,7 @@ function(qidistudio_add_cmake_project projectname)
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
-DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_SHARED_LIBS:BOOL=OFF
${_cmake_osx_arch}
"${_configs_line}" "${_configs_line}"
${DEP_CMAKE_OPTS} ${DEP_CMAKE_OPTS}
${P_ARGS_CMAKE_ARGS} ${P_ARGS_CMAKE_ARGS}
@@ -236,6 +270,12 @@ if (DEP_BUILD_FFMPEG)
set(FFMPEG_PKG dep_FFMPEG) set(FFMPEG_PKG dep_FFMPEG)
endif () endif ()
set(WEBSOCKETPP_PKG "")
if (DEP_BUILD_WEBSOCKET)
include(WebSocketPP/WebSocketPP.cmake)
set(WEBSOCKETPP_PKG dep_WebSocketPP)
endif()
set(_dep_list set(_dep_list
${BOOST_PKG} ${BOOST_PKG}
dep_TBB dep_TBB
@@ -254,6 +294,7 @@ set(_dep_list
${EXPAT_PKG} ${EXPAT_PKG}
${FREETYPE_PKG} ${FREETYPE_PKG}
${FFMPEG_PKG} ${FFMPEG_PKG}
${WEBSOCKETPP_PKG}
) )
if (MSVC) if (MSVC)

View File

@@ -4,7 +4,7 @@ if (MSVC)
set(_dstdir ${DESTDIR}/usr/local) set(_dstdir ${DESTDIR}/usr/local)
set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG") set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG")
ExternalProject_Add(dep_FFMPEG ExternalProject_Add(dep_FFMPEG
URL https://github.com/qiditech/ffmpeg_prebuilts/releases/download/7.0.2/7.0.2_msvc.zip URL https://github.com/bambulab/ffmpeg_prebuilts/releases/download/7.0.2/7.0.2_msvc.zip
URL_HASH SHA256=DF44AE6B97CE84C720695AE7F151B4A9654915D1841C68F10D62A1189E0E7181 URL_HASH SHA256=DF44AE6B97CE84C720695AE7F151B4A9654915D1841C68F10D62A1189E0E7181
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND "" CONFIGURE_COMMAND ""
@@ -28,32 +28,58 @@ else ()
string(APPEND _extra_cmd "--enable-gpl") string(APPEND _extra_cmd "--enable-gpl")
string(APPEND _extra_cmd "--enable-nonfree") string(APPEND _extra_cmd "--enable-nonfree")
if (APPLE)
set(_minos_cmd
"CFLAGS=-mmacosx-version-min=${DEP_OSX_TARGET}"
"LDFLAGS=-mmacosx-version-min=${DEP_OSX_TARGET}"
)
if (IS_CROSS_COMPILE)
set(_cross_cmd --enable-cross-compile)
set(_pic_cmd --enable-pic)
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64")
set(_arch_cmd --arch=arm64)
set(_cc_cmd "--cc=clang -arch arm64")
else()
set(_arch_cmd --arch=x86_64)
set(_cc_cmd "--cc=clang -arch x86_64")
endif()
endif()
endif()
set(_build_j -j)
if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL})
set(_build_j "-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}")
endif()
ExternalProject_Add(dep_FFMPEG ExternalProject_Add(dep_FFMPEG
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.2.tar.gz URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.2.tar.gz
URL_HASH SHA256=5EB46D18D664A0CCADF7B0ADEE03BD3B7FA72893D667F36C69E202A807E6D533 URL_HASH SHA256=5EB46D18D664A0CCADF7B0ADEE03BD3B7FA72893D667F36C69E202A807E6D533
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND ${_conf_cmd} CONFIGURE_COMMAND ${_conf_cmd}
"--prefix=${DESTDIR}/usr/local" ${_cross_cmd}
"--enable-shared" ${_pic_cmd}
"--disable-doc" ${_arch_cmd}
"--enable-small" ${_cc_cmd}
"--disable-outdevs" --prefix="${DESTDIR}/usr/local"
"--disable-filters" --enable-shared
"--enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test*" --disable-doc
"--disable-protocols" --enable-small
"--enable-protocol=file,fd,pipe,rtp,udp" --disable-outdevs
"--disable-muxers" --disable-filters
"--enable-muxer=rtp" --enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test*
"--disable-encoders" --disable-protocols
"--disable-decoders" --enable-protocol=file,fd,pipe,rtp,udp
"--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*" --disable-muxers
"--disable-demuxers" --enable-muxer=rtp
"--enable-demuxer=h264,mp3,mov" --disable-encoders
"--disable-zlib" --disable-decoders
"--disable-avdevice" --enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*
--disable-demuxers
--enable-demuxer=h264,mp3,mov
--disable-zlib
--disable-avdevice
BUILD_IN_SOURCE ON BUILD_IN_SOURCE ON
BUILD_COMMAND make -j BUILD_COMMAND make ${_build_j}
INSTALL_COMMAND make install INSTALL_COMMAND make install
) )

View File

@@ -3,9 +3,12 @@ project(GLEW)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
if(OpenGL_EGL_FOUND) # we do not support wayland for now
message(STATUS "building GLEW for EGL (hope that wxWidgets agrees, otherwise you won't have any output!)") if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGLEW_EGL") if(OpenGL_EGL_FOUND)
message(STATUS "building GLEW for EGL (hope that wxWidgets agrees, otherwise you won't have any output!)")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGLEW_EGL")
endif()
endif() endif()
add_library(GLEW src/glew.c) add_library(GLEW src/glew.c)

22
deps/GMP/GMP.cmake vendored
View File

@@ -22,10 +22,24 @@ else ()
if (APPLE) if (APPLE)
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
set(_gmp_build_tgt aarch64) set(_gmp_build_arch aarch64)
else ()
set(_gmp_build_arch ${CMAKE_SYSTEM_PROCESSOR})
endif()
if (IS_CROSS_COMPILE)
if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm")
set(_gmp_host_arch aarch64)
set(_gmp_host_arch_flags "-arch arm64")
elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64")
set(_gmp_host_arch x86_64)
set(_gmp_host_arch_flags "-arch x86_64")
endif()
set(_gmp_ccflags "${_gmp_ccflags} ${_gmp_host_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET}")
set(_gmp_build_tgt --build=${_gmp_build_arch}-apple-darwin --host=${_gmp_host_arch}-apple-darwin)
else ()
set(_gmp_ccflags "${_gmp_ccflags} -mmacosx-version-min=${DEP_OSX_TARGET}")
set(_gmp_build_tgt "--build=${_gmp_build_arch}-apple-darwin")
endif() endif()
set(_gmp_ccflags "${_gmp_ccflags} -mmacosx-version-min=${DEP_OSX_TARGET}")
set(_gmp_build_tgt "--build=${_gmp_build_tgt}-apple-darwin")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
set(_gmp_ccflags "${_gmp_ccflags} -march=armv7-a") # Works on RPi-4 set(_gmp_ccflags "${_gmp_ccflags} -march=armv7-a") # Works on RPi-4
@@ -43,7 +57,7 @@ else ()
endif () endif ()
ExternalProject_Add(dep_GMP ExternalProject_Add(dep_GMP
URL https://github.com/qiditech/gmp/archive/refs/tags/6.2.1.tar.gz URL https://github.com/bambulab/gmp/archive/refs/tags/6.2.1.tar.gz
URL_HASH SHA256=705ae57ee2014b2c6fc0f572c85ee43276b99b6b256ee16c1a9d3a8c4e3609d5 URL_HASH SHA256=705ae57ee2014b2c6fc0f572c85ee43276b99b6b256ee16c1a9d3a8c4e3609d5
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP
BUILD_IN_SOURCE ON BUILD_IN_SOURCE ON

View File

@@ -12,8 +12,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif() endif()
qidistudio_add_cmake_project(JPEG qidistudio_add_cmake_project(JPEG
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.0.1.zip
URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1 URL_HASH SHA256=d6d99e693366bc03897677650e8b2dfa76b5d6c54e2c9e70c03f0af821b0a52f
DEPENDS ${ZLIB_PKG} DEPENDS ${ZLIB_PKG}
CMAKE_ARGS CMAKE_ARGS
-DENABLE_SHARED=OFF -DENABLE_SHARED=OFF

View File

@@ -195,3 +195,27 @@ index 5ae9899f..0a17372b 100644
if (!myFTLib->IsValid()) if (!myFTLib->IsValid())
{ {
From 7236e83dcc1e7284e66dc61e612154617ef715d6 Mon Sep 17 00:00:00 2001
From: dpasukhi <dpasukhi@opencascade.com>
Date: Tue, 27 Aug 2024 11:33:29 +0100
Subject: [PATCH] 0033808: Coding - FreeType Use unsigned point and contour
indexing in `FT_Outline`
Changes to auto instead of specific type
---
src/StdPrs/StdPrs_BRepFont.cxx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/StdPrs/StdPrs_BRepFont.cxx b/src/StdPrs/StdPrs_BRepFont.cxx
index ab2d9b3c9f..cd701879b1 100644
--- a/src/StdPrs/StdPrs_BRepFont.cxx
+++ b/src/StdPrs/StdPrs_BRepFont.cxx
@@ -457,7 +457,7 @@ Standard_Boolean StdPrs_BRepFont::renderGlyph (const Standard_Utf32Char theChar,
for (short aContour = 0, aStartIndex = 0; aContour < anOutline->n_contours; ++aContour)
{
const FT_Vector* aPntList = &anOutline->points[aStartIndex];
- const char* aTags = &anOutline->tags[aStartIndex];
+ const auto* aTags = &anOutline->tags[aStartIndex];
const short anEndIndex = anOutline->contours[aContour];
const short aPntsNb = (anEndIndex - aStartIndex) + 1;
aStartIndex = anEndIndex + 1;

View File

@@ -4,11 +4,14 @@ else()
set(library_build_type "Static") set(library_build_type "Static")
endif() endif()
if (BINARY_DIR_REL)
set(OCCT_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT)
endif ()
qidistudio_add_cmake_project(OCCT qidistudio_add_cmake_project(OCCT
URL https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip URL https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V7_6_0.zip
URL_HASH SHA256=28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc URL_HASH SHA256=28334f0e98f1b1629799783e9b4d21e05349d89e695809d7e6dfa45ea43e1dbc
#PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch PATCH_COMMAND git apply ${OCCT_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch
PATCH_COMMAND ${GIT_EXECUTABLE} apply --directory deps/build/dep_OCCT-prefix/src/dep_OCCT --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch
#DEPENDS dep_Boost #DEPENDS dep_Boost
#DEPENDS dep_FREETYPE #DEPENDS dep_FREETYPE
CMAKE_ARGS CMAKE_ARGS

24
deps/OpenCV/0002-clang19-macos.patch vendored Normal file
View File

@@ -0,0 +1,24 @@
diff --git a/3rdparty/libpng/pngpriv.h b/3rdparty/libpng/pngpriv.h
index 583c26f..83e0ab8 100644
--- a/3rdparty/libpng/pngpriv.h
+++ b/3rdparty/libpng/pngpriv.h
@@ -517,18 +517,7 @@
*/
# include <float.h>
-# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
- /* We need to check that <math.h> hasn't already been included earlier
- * as it seems it doesn't agree with <fp.h>, yet we should really use
- * <fp.h> if possible.
- */
-# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-# include <fp.h>
-# endif
-# else
-# include <math.h>
-# endif
+# include <math.h>
# if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
/* Amiga SAS/C: We must include builtin FPU functions when compiling using
* MATH=68881

View File

@@ -4,10 +4,14 @@ else ()
set(_use_IPP "-DWITH_IPP=OFF") set(_use_IPP "-DWITH_IPP=OFF")
endif () endif ()
if (BINARY_DIR_REL)
set(OpenCV_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV)
endif ()
qidistudio_add_cmake_project(OpenCV qidistudio_add_cmake_project(OpenCV
URL https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz URL https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz
URL_HASH SHA256=1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277 URL_HASH SHA256=1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277
PATCH_COMMAND ${GIT_EXECUTABLE} apply --directory deps/build/dep_OpenCV-prefix/src/dep_OpenCV --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OpenCV-fix.patch PATCH_COMMAND git apply ${OpenCV_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-OpenCV-fix.patch ${CMAKE_CURRENT_LIST_DIR}/0002-clang19-macos.patch
CMAKE_ARGS CMAKE_ARGS
-DBUILD_SHARED_LIBS=0 -DBUILD_SHARED_LIBS=0
-DBUILD_PERE_TESTS=OFF -DBUILD_PERE_TESTS=OFF
@@ -49,6 +53,7 @@ qidistudio_add_cmake_project(OpenCV
-DWITH_OPENJPEG=OFF -DWITH_OPENJPEG=OFF
-DWITH_QUIRC=OFF -DWITH_QUIRC=OFF
-DWITH_VTK=OFF -DWITH_VTK=OFF
-DWITH_JPEG=OFF
-DWITH_WEBP=OFF -DWITH_WEBP=OFF
-DENABLE_PRECOMPILED_HEADERS=OFF -DENABLE_PRECOMPILED_HEADERS=OFF
-DINSTALL_TESTS=OFF -DINSTALL_TESTS=OFF

View File

@@ -1,3 +1,32 @@
if (APPLE AND IS_CROSS_COMPILE)
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64" AND ${CMAKE_OSX_ARCHITECTURES} MATCHES "arm")
set(_openexr_arch arm64^^x86_64)
set(_openxr_list_sep LIST_SEPARATOR ^^)
set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch})
else()
set(_openexr_arch ${CMAKE_OSX_ARCHITECTURES})
set(_cmake_openexr_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${_openexr_arch})
endif()
ExternalProject_Add(dep_OpenEXR
EXCLUDE_FROM_ALL ON
URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip
URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de
INSTALL_DIR ${DESTDIR}/usr/local
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenEXR
${_openxr_list_sep}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DBUILD_TESTING=OFF
-DPYILMBASE_ENABLE:BOOL=OFF
-DOPENEXR_VIEWERS_ENABLE:BOOL=OFF
-DOPENEXR_BUILD_UTILS:BOOL=OFF
-DCMAKE_OSX_DEPLOYMENT_TARGET=${DEP_OSX_TARGET}
${_cmake_openexr_arch}
)
else()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch) set(_patch_cmd ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OpenEXR-GCC13.patch)
else() else()
@@ -18,7 +47,7 @@ qidistudio_add_cmake_project(OpenEXR
-DOPENEXR_VIEWERS_ENABLE:BOOL=OFF -DOPENEXR_VIEWERS_ENABLE:BOOL=OFF
-DOPENEXR_BUILD_UTILS:BOOL=OFF -DOPENEXR_BUILD_UTILS:BOOL=OFF
) )
endif()
if (MSVC) if (MSVC)
add_debug_dep(dep_OpenEXR) add_debug_dep(dep_OpenEXR)
endif () endif ()

View File

@@ -19,7 +19,7 @@ if(WIN32)
set(_install_cmd nmake install_sw ) set(_install_cmd nmake install_sw )
else() else()
if(APPLE) if(APPLE)
set(_conf_cmd ./Configure ) set(_conf_cmd export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} && ./Configure -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} )
else() else()
set(_conf_cmd "./config") set(_conf_cmd "./config")
endif() endif()
@@ -58,6 +58,7 @@ ExternalProject_Add(dep_OpenSSL
${_cross_comp_prefix_line} ${_cross_comp_prefix_line}
no-shared no-shared
no-asm no-asm
no-tests
no-ssl3-method no-ssl3-method
no-dynamic-engine no-dynamic-engine
BUILD_IN_SOURCE ON BUILD_IN_SOURCE ON

31
deps/OpenVDB/0001-clang19.patch vendored Normal file
View File

@@ -0,0 +1,31 @@
diff --git a/openvdb/openvdb/tree/NodeManager.h b/openvdb/openvdb/tree/NodeManager.h
index 4d0d9b4..12dabaa 100644
--- a/openvdb/openvdb/tree/NodeManager.h
+++ b/openvdb/openvdb/tree/NodeManager.h
@@ -327,7 +327,7 @@ private:
void operator()(const NodeRange& range) const
{
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
- OpT::template eval(mNodeOp, it);
+ OpT::eval(mNodeOp, it);
}
}
const NodeOp mNodeOp;
@@ -347,7 +347,7 @@ private:
void operator()(const NodeRange& range) const
{
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
- OpT::template eval(mNodeOp, it);
+ OpT::eval(mNodeOp, it);
}
}
const NodeOp& mNodeOp;
@@ -372,7 +372,7 @@ private:
void operator()(const NodeRange& range)
{
for (typename NodeRange::Iterator it = range.begin(); it; ++it) {
- OpT::template eval(*mNodeOp, it);
+ OpT::eval(*mNodeOp, it);
}
}
void join(const NodeReducer& other)

View File

@@ -6,6 +6,10 @@ else()
set(_build_static ON) set(_build_static ON)
endif() endif()
if (BINARY_DIR_REL)
set(OPENVDB_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OpenVDB-prefix/src/dep_OpenVDB)
endif ()
set (_openvdb_vdbprint ON) set (_openvdb_vdbprint ON)
#if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") #if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
# Build fails on raspberry pi due to missing link directive to latomic # Build fails on raspberry pi due to missing link directive to latomic
@@ -15,6 +19,7 @@ set (_openvdb_vdbprint ON)
qidistudio_add_cmake_project(OpenVDB qidistudio_add_cmake_project(OpenVDB
URL https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip # 8.2 patched URL https://github.com/tamasmeszaros/openvdb/archive/a68fd58d0e2b85f01adeb8b13d7555183ab10aa5.zip # 8.2 patched
URL_HASH SHA256=f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81 URL_HASH SHA256=f353e7b99bd0cbfc27ac9082de51acf32a8bc0b3e21ff9661ecca6f205ec1d81
PATCH_COMMAND git apply ${OPENVDB_DIRECTORY_FLAG} --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-clang19.patch
# URL https://github.com/AcademySoftwareFoundation/openvdb/archive/refs/tags/v10.0.1.zip # URL https://github.com/AcademySoftwareFoundation/openvdb/archive/refs/tags/v10.0.1.zip
# URL_HASH SHA256=48C2CFA9853B58FA86282DF1F83F0E99D07858CC03EB2BA8227DC447A830100A # URL_HASH SHA256=48C2CFA9853B58FA86282DF1F83F0E99D07858CC03EB2BA8227DC447A830100A
DEPENDS dep_TBB dep_Blosc dep_OpenEXR ${BOOST_PKG} DEPENDS dep_TBB dep_Blosc dep_OpenEXR ${BOOST_PKG}

29
deps/PNG/0002-clang19-macos.patch vendored Normal file
View File

@@ -0,0 +1,29 @@
--- a/pngpriv.h 2025-04-20 19:36:04.000000000
+++ b/pngpriv.h 2025-04-20 19:35:55.000000000
@@ -511,24 +511,14 @@
* DBL_DIG Maximum number of decimal digits (can be set to any constant)
* DBL_MIN Smallest normalized fp number (can be set to an arbitrary value)
* DBL_MAX Maximum floating point number (can be set to an arbitrary value)
*/
# include <float.h>
-# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
- /* We need to check that <math.h> hasn't already been included earlier
- * as it seems it doesn't agree with <fp.h>, yet we should really use
- * <fp.h> if possible.
- */
-# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-# include <fp.h>
-# endif
-# else
-# include <math.h>
-# endif
+# include <math.h>
+
# if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
/* Amiga SAS/C: We must include builtin FPU functions when compiling using
* MATH=68881
*/
# include <m68881.h>
# endif

53
deps/PNG/PNG.cmake vendored
View File

@@ -5,26 +5,43 @@ else ()
set(_disable_neon_extension "") set(_disable_neon_extension "")
endif () endif ()
if(APPLE AND IS_CROSS_COMPILE)
# TODO: check if it doesn't create problem when compiling from arm to x86_64
qidistudio_add_cmake_project(PNG
GIT_REPOSITORY https://github.com/glennrp/libpng.git
GIT_TAG v1.6.35
DEPENDS ${ZLIB_PKG}
PATCH_COMMAND ${GIT_EXECUTABLE} checkout -f -- . && git clean -df &&
${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/macos-arm64.patch ${CMAKE_CURRENT_LIST_DIR}/0002-clang19-macos.patch
CMAKE_ARGS
-DPNG_SHARED=OFF
-DPNG_STATIC=ON
-DPNG_PREFIX=prusaslicer_
-DPNG_TESTS=OFF
-DDISABLE_DEPENDENCY_TRACKING=OFF
${_disable_neon_extension}
)
else ()
set(_patch_step "") set(_patch_step "")
if (APPLE) if (APPLE)
set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch) set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch ${CMAKE_CURRENT_LIST_DIR}/0002-clang19-macos.patch)
endif () endif ()
qidistudio_add_cmake_project(PNG
qidistudio_add_cmake_project(PNG # GIT_REPOSITORY https://github.com/glennrp/libpng.git
# GIT_REPOSITORY https://github.com/glennrp/libpng.git # GIT_TAG v1.6.35
# GIT_TAG v1.6.35 URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip
URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip URL_HASH SHA256=3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f
URL_HASH SHA256=3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f DEPENDS ${ZLIB_PKG}
DEPENDS ${ZLIB_PKG} "${_patch_step}"
"${_patch_step}" CMAKE_ARGS
CMAKE_ARGS -DPNG_SHARED=OFF
-DPNG_SHARED=OFF -DPNG_STATIC=ON
-DPNG_STATIC=ON -DPNG_PREFIX=prusaslicer_
-DPNG_PREFIX=prusaslicer_ -DPNG_TESTS=OFF
-DPNG_TESTS=OFF -DDISABLE_DEPENDENCY_TRACKING=OFF
-DDISABLE_DEPENDENCY_TRACKING=OFF ${_disable_neon_extension}
${_disable_neon_extension}
) )
endif()
if (MSVC) if (MSVC)
add_debug_dep(dep_PNG) add_debug_dep(dep_PNG)

90
deps/PNG/macos-arm64.patch vendored Normal file
View File

@@ -0,0 +1,90 @@
Based on https://github.com/vespakoen/libpng to work around until
https://github.com/glennrp/libpng/pull/354 is resolved.
also added patch from PS2.4 (PNG.pach) in pngrutil.c
---
CMakeLists.txt | 28 ++++++++++++++++++++--------
pngrutil.c | 7 -------
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4db9bb87d..9099d1edf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -82,10 +82,22 @@ option(PNG_HARDWARE_OPTIMIZATIONS "Enable Hardware Optimizations" ON)
set(PNG_PREFIX "" CACHE STRING "Prefix to add to the API function names")
set(DFA_XTRA "" CACHE FILEPATH "File containing extra configuration settings")
+# CMake currently sets CMAKE_SYSTEM_PROCESSOR to one of x86_64 or arm64 on macOS,
+# based upon the OS architecture, not the target architecture. As such, we need
+# to check CMAKE_OSX_ARCHITECTURES to identify which hardware-specific flags to
+# enable. Note that this will fail if you attempt to build a universal binary in
+# a single cmake invokation.
+if (APPLE AND CMAKE_OSX_ARCHITECTURES)
+ set(TARGET_ARCH ${CMAKE_OSX_ARCHITECTURES})
+else()
+ set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR})
+endif()
+
+
if(PNG_HARDWARE_OPTIMIZATIONS)
# set definitions and sources for arm
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
+if(TARGET_ARCH MATCHES "^arm" OR
+ TARGET_ARCH MATCHES "^aarch64")
set(PNG_ARM_NEON_POSSIBLE_VALUES check on off)
set(PNG_ARM_NEON "check" CACHE STRING "Enable ARM NEON optimizations:
check: (default) use internal checking code;
@@ -114,8 +126,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" OR
endif()
# set definitions and sources for powerpc
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64*" )
+if(TARGET_ARCH MATCHES "^powerpc*" OR
+ TARGET_ARCH MATCHES "^ppc64*" )
set(PNG_POWERPC_VSX_POSSIBLE_VALUES on off)
set(PNG_POWERPC_VSX "on" CACHE STRING "Enable POWERPC VSX optimizations:
off: disable the optimizations.")
@@ -138,8 +150,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^powerpc*" OR
endif()
# set definitions and sources for intel
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "^x86_64*" )
+if(TARGET_ARCH MATCHES "^i?86" OR
+ TARGET_ARCH MATCHES "^x86_64*" )
set(PNG_INTEL_SSE_POSSIBLE_VALUES on off)
set(PNG_INTEL_SSE "on" CACHE STRING "Enable INTEL_SSE optimizations:
off: disable the optimizations")
@@ -162,8 +174,8 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i?86" OR
endif()
# set definitions and sources for MIPS
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "mipsel*" OR
- CMAKE_SYSTEM_PROCESSOR MATCHES "mips64el*" )
+if(TARGET_ARCH MATCHES "mipsel*" OR
+ TARGET_ARCH MATCHES "mips64el*" )
set(PNG_MIPS_MSA_POSSIBLE_VALUES on off)
set(PNG_MIPS_MSA "on" CACHE STRING "Enable MIPS_MSA optimizations:
off: disable the optimizations")
diff --git a/pngrutil.c b/pngrutil.c
index 7001f1976..91930f1f2 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -422,13 +422,6 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
}
-#if ZLIB_VERNUM >= 0x1290 && \
- defined(PNG_SET_OPTION_SUPPORTED) && defined(PNG_IGNORE_ADLER32)
- if (((png_ptr->options >> PNG_IGNORE_ADLER32) & 3) == PNG_OPTION_ON)
- /* Turn off validation of the ADLER32 checksum in IDAT chunks */
- ret = inflateValidate(&png_ptr->zstream, 0);
-#endif
-
if (ret == Z_OK)
png_ptr->zowner = owner;
--
2.33.0.windows.1

View File

@@ -1,8 +1,8 @@
find_package(OpenGL QUIET REQUIRED) find_package(OpenGL QUIET REQUIRED)
qidistudio_add_cmake_project(TIFF qidistudio_add_cmake_project(TIFF
URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip URL https://download.osgeo.org/libtiff/tiff-4.1.0.zip
URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32 URL_HASH SHA256=6F3DBED9D2ECFED33C7192B5C01884078970657FA21B4AD28E3CDF3438EB2419
DEPENDS ${ZLIB_PKG} ${PNG_PKG} ${JPEG_PKG} DEPENDS ${ZLIB_PKG} ${PNG_PKG} ${JPEG_PKG}
CMAKE_ARGS CMAKE_ARGS
-Dlzma:BOOL=OFF -Dlzma:BOOL=OFF

25
deps/WebSocketPP/WebSocketPP.cmake vendored Normal file
View File

@@ -0,0 +1,25 @@
# 构建 WebSocketPP
ExternalProject_Add(
dep_WebSocketPP
GIT_REPOSITORY https://github.com/zaphoyd/websocketpp.git
GIT_TAG 0.8.2
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/WebSocketPP
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/WebSocketPP
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND
${CMAKE_COMMAND} -E make_directory ${DESTDIR}/usr/local/include &&
${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_BINARY_DIR}/WebSocketPP/src/dep_WebSocketPP/websocketpp
${DESTDIR}/usr/local/include/websocketpp
UPDATE_COMMAND ""
PATCH_COMMAND ""
)
# 设置依赖关系
ExternalProject_Add_StepDependencies(
dep_WebSocketPP
configure
dep_OpenSSL
dep_Boost
)

View File

@@ -6,8 +6,9 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif () endif ()
set(_wx_toolkit "-DwxBUILD_TOOLKIT=gtk${_gtk_ver}") set(_wx_toolkit "-DwxBUILD_TOOLKIT=gtk${_gtk_ver}")
set(_wx_private_font "-DwxUSE_PRIVATE_FONTS=1") set(_wx_private_font "-DwxUSE_PRIVATE_FONTS=1")
set(_wx_egl "-DwxUSE_GLCANVAS_EGL=OFF")
else () else ()
set(_wx_private_font "-DwxUSE_PRIVATE_FONTS=0") set(_wx_egl "")
endif() endif()
if (MSVC) if (MSVC)
@@ -23,7 +24,7 @@ endif ()
# endif () # endif ()
qidistudio_add_cmake_project(wxWidgets qidistudio_add_cmake_project(wxWidgets
GIT_REPOSITORY "https://github.com/qiditech/wxWidgets" GIT_REPOSITORY "https://github.com/bambulab/wxWidgets"
GIT_TAG master GIT_TAG master
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${TIFF_PKG} ${JPEG_PKG} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${TIFF_PKG} ${JPEG_PKG}
CMAKE_ARGS CMAKE_ARGS
@@ -52,6 +53,7 @@ qidistudio_add_cmake_project(wxWidgets
-DwxUSE_LIBJPEG=sys -DwxUSE_LIBJPEG=sys
-DwxUSE_LIBTIFF=sys -DwxUSE_LIBTIFF=sys
-DwxUSE_EXPAT=sys -DwxUSE_EXPAT=sys
${_wx_egl}
) )
if (MSVC) if (MSVC)

View File

@@ -0,0 +1,19 @@
ARG VERSION="studio_dep_22"
FROM ${VERSION}:1.0 AS builder
COPY ./ /QIDIStudio
WORKDIR /QIDIStudio
RUN mkdir -p /QIDIStudio/deps/build
RUN mv /destdir /QIDIStudio/deps/build/
RUN ./BuildLinux.sh -s
ENV container=podman
RUN ./BuildLinux.sh -i
FROM scratch AS export-stage
COPY --from=builder /QIDIStudio/build/QIDIStudio_ubu64.AppImage /

View File

@@ -0,0 +1,39 @@
FROM docker.io/ubuntu:22.04
# Disable interactive package configuration
RUN apt-get update && \
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get update && apt-get install -y \
autoconf \
build-essential \
cmake \
curl \
xvfb \
extra-cmake-modules \
file \
git \
locales \
locales-all \
m4 \
pkgconf \
sudo \
wayland-protocols \
libwebkit2gtk-4.0-dev \
wget
COPY ./ /QIDIStudio
WORKDIR /QIDIStudio
# Allow password-less sudo for ALL users
RUN echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/999-passwordless
RUN chmod 440 /etc/sudoers.d/999-passwordless
RUN ./BuildLinux.sh -u
RUN ./BuildLinux.sh -dfr
RUN cp -r deps/build/destdir /
RUN rm -rf /QIDIStudio

View File

@@ -0,0 +1,39 @@
FROM docker.io/ubuntu:24.04
# Disable interactive package configuration
RUN apt-get update && \
echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get update && apt-get install -y \
autoconf \
build-essential \
cmake \
curl \
xvfb \
extra-cmake-modules \
file \
git \
locales \
locales-all \
m4 \
pkgconf \
sudo \
wayland-protocols \
libwebkit2gtk-4.1-dev \
wget
COPY ./ /QIDIStudio
WORKDIR /QIDIStudio
# Allow password-less sudo for ALL users
RUN echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/999-passwordless
RUN chmod 440 /etc/sudoers.d/999-passwordless
RUN ./BuildLinux.sh -u
RUN ./BuildLinux.sh -dfr
RUN cp -r deps/build/destdir /
RUN rm -rf /QIDIStudio

View File

@@ -30,6 +30,7 @@ REQUIRED_DEV_PACKAGES=(
nasm nasm
yasm yasm
libx264-dev libx264-dev
libbz2-dev
) )
if [[ -n "$UPDATE_LIB" ]] if [[ -n "$UPDATE_LIB" ]]

View File

@@ -38,6 +38,7 @@ REQUIRED_DEV_PACKAGES=(
nasm nasm
yasm yasm
x264-devel x264-devel
bzip2-devel
) )
if [[ -n "$UPDATE_LIB" ]] if [[ -n "$UPDATE_LIB" ]]

View File

@@ -7,8 +7,9 @@ namespace QIDIStudio {
//QDS: only check wodth when dE is longer than this value //QDS: only check wodth when dE is longer than this value
const double CHECK_WIDTH_E_THRESHOLD = 0.0025; const double CHECK_WIDTH_E_THRESHOLD = 0.0025;
const double WIDTH_THRESHOLD = 0.02; const double WIDTH_THRESHOLD = 0.05;
const double RADIUS_THRESHOLD = 0.005; const double RADIUS_THRESHOLD = 0.005;
const double MULTI_NOZZLE_TEMP_THRESHOLD = 100;
const double filament_diameter = 1.75; const double filament_diameter = 1.75;
const double Pi = 3.14159265358979323846; const double Pi = 3.14159265358979323846;
@@ -28,6 +29,8 @@ const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_i
const std::string Z_HEIGHT_TAG = " Z_HEIGHT: "; const std::string Z_HEIGHT_TAG = " Z_HEIGHT: ";
const std::string Initial_Layer_Ptint_Height_Tag = " initial_layer_print_height ="; const std::string Initial_Layer_Ptint_Height_Tag = " initial_layer_print_height =";
const std::string Line_Width_Tag = " line_width ="; const std::string Line_Width_Tag = " line_width =";
const std::string Filament_Map_Tag = " filament_map =";
const std::string Physical_Extruder_Map_Tag = " physical_extruder_map =";
GCodeCheckResult GCodeChecker::parse_file(const std::string& path) GCodeCheckResult GCodeChecker::parse_file(const std::string& path)
{ {
@@ -38,7 +41,11 @@ GCodeCheckResult GCodeChecker::parse_file(const std::string& path)
} }
std::string line_raw; std::string line_raw;
std::string line; std::string line;
int line_number = 0;
while (std::getline(file, line_raw)) { while (std::getline(file, line_raw)) {
line_number++;
const char *c = line_raw.c_str(); const char *c = line_raw.c_str();
c = skip_whitespaces(c); c = skip_whitespaces(c);
if (std::toupper(*c) == 'N') if (std::toupper(*c) == 'N')
@@ -46,7 +53,8 @@ GCodeCheckResult GCodeChecker::parse_file(const std::string& path)
c = skip_whitespaces(c); c = skip_whitespaces(c);
line = c; line = c;
if (parse_line(line) != GCodeCheckResult::Success) { if (parse_line(line) != GCodeCheckResult::Success) {
std::cout << "Failed to parse line " << line_raw << std::endl; std::cerr << "Failed to parse line " << line_number
<< ": " << line_raw << std::endl;
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
} }
@@ -115,17 +123,40 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
if (starts_with(comment, Extrusion_Role_Tag)) { if (starts_with(comment, Extrusion_Role_Tag)) {
m_role = string_to_role(comment.substr(Extrusion_Role_Tag.length())); m_role = string_to_role(comment.substr(Extrusion_Role_Tag.length()));
check_gap_infill_width = false; check_gap_infill_width = false;
if (m_role == erExternalPerimeter) {
if (z_height == initial_layer_height && nozzle_temp != nozzle_temperature_initial_layer[filament_id]) {
std::cout << "invalid filament nozzle initial layer temperature comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
if (z_height != initial_layer_height && nozzle_temp != nozzle_temperature[filament_id]) { double check_nozzle_temp = 0.0f;
std::cout << "invalid filament nozzle temperature comment with invalid value!" << std::endl; if (is_multi_nozzle == true) {
return GCodeCheckResult::ParseFailed; check_nozzle_temp = multi_nozzle_temp[current_nozzle_id];
}
else
{
check_nozzle_temp = nozzle_temp;
}
if (m_role == erExternalPerimeter) {
if (z_height != initial_layer_height) {
if (is_multi_nozzle) {
double expected_temp = nozzle_temperature[filament_id];
if (std::abs(check_nozzle_temp - expected_temp) > MULTI_NOZZLE_TEMP_THRESHOLD) {
// for two nozzle gcode, remove temp check temply
//std::cout << "Multi-nozzle: Invalid filament nozzle temperature! Expected: "
// << expected_temp
// << ", but got: " << check_nozzle_temp
// << " (Threshold: ±100)." << std::endl;
return GCodeCheckResult::Success;
}
}
else {
if (check_nozzle_temp != nozzle_temperature[filament_id]) {
std::cout << "Invalid filament nozzle temperature! Expected: "
<< nozzle_temperature[filament_id]
<< ", but got: " << check_nozzle_temp << "." << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
} }
} else if (m_role == erGapFill) { }
else if (m_role == erGapFill) {
check_gap_infill_width = true; check_gap_infill_width = true;
} }
@@ -189,7 +220,36 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
std::cout << "invalid nozzle temperature initial layer comment with invalid value!" << std::endl; std::cout << "invalid nozzle temperature initial layer comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
} else if (starts_with(comment, Z_HEIGHT_TAG)) { }
else if (starts_with(comment, Filament_Map_Tag)) {
std::string str = comment.substr(Filament_Map_Tag.size() + 1);
if (!parse_double_from_str(str, filament_map)) {
std::cout << "invalid filament map comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
else {
for (size_t i = 0; i < filament_map.size(); ++i) {
filament_map[i] -= 1;
}
is_multi_nozzle = true;
}
}
else if (starts_with(comment, Physical_Extruder_Map_Tag)) {
std::string str = comment.substr(Physical_Extruder_Map_Tag.size() + 1);
std::vector<double>tmp;
if (!parse_double_from_str(str, tmp)){
std::cout << "invalid physical extruder map comment with invalid value!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
for (size_t idx = 0; idx < tmp.size(); ++idx) {
physical_to_logic_extruder_map[(int)(tmp[idx])]= idx;
logic_to_physical_extruder_map[idx] = (int)(tmp[idx]);
}
}
else if (starts_with(comment, Z_HEIGHT_TAG)) {
std::string str = comment.substr(Z_HEIGHT_TAG.size()); std::string str = comment.substr(Z_HEIGHT_TAG.size());
if (!parse_double_from_str(str, z_height)) { if (!parse_double_from_str(str, z_height)) {
std::cout << "invalid z height comment with invalid value!" << std::endl; std::cout << "invalid z height comment with invalid value!" << std::endl;
@@ -257,7 +317,7 @@ GCodeCheckResult GCodeChecker::parse_command(GCodeLine& gcode_line)
case 'T':{ case 'T':{
int pt = ::atoi(&cmd[1]); int pt = ::atoi(&cmd[1]);
if (pt == 1000 || pt == 1100 || pt == 255) { if (pt == 1000 || pt == 1100 || pt == 255 || pt == 1001 || pt == 65535 || pt == 65279 || pt == -1) {
break; break;
} }
@@ -267,9 +327,24 @@ GCodeCheckResult GCodeChecker::parse_command(GCodeLine& gcode_line)
break; break;
} }
filament_id = pt; filament_id = pt;
if (is_multi_nozzle == true) {
set_current_nozzle(pt);
}
flow_ratio = filament_flow_ratio[pt]; flow_ratio = filament_flow_ratio[pt];
break; break;
} }
case 'S': {
if (cmd.compare(0, 4, "SYNC") == 0) {
// Valid SYNC command
}
else {
// Invalid SYNC command
ret = GCodeCheckResult::ParseFailed;
}
break;
}
default: { default: {
//QDS: other g command? impossible! must be invalid //QDS: other g command? impossible! must be invalid
ret = GCodeCheckResult::ParseFailed; ret = GCodeCheckResult::ParseFailed;
@@ -479,21 +554,42 @@ GCodeCheckResult GCodeChecker::parse_M83(const GCodeLine& gcode_line)
return GCodeCheckResult::Success; return GCodeCheckResult::Success;
} }
GCodeCheckResult GCodeChecker::parse_M104_M109(const GCodeLine &gcode_line) GCodeCheckResult GCodeChecker::parse_M104_M109(const GCodeLine& gcode_line)
{ {
const char *c = gcode_line.m_raw.c_str(); const char* c = gcode_line.m_raw.c_str();
const char *rs = strchr(c,'S'); const char* rs = strchr(c, 'S');
if (!rs) {
std::string str=rs; std::cout << "No S parameter found in M104/M109 command!" << std::endl;
str = str.substr(1); return GCodeCheckResult::Success;
for (int i = 0; i < str.size(); i++) {
if (str[i] == ' ')
str=str.substr(0,i);
} }
if (!parse_double_from_str(str, nozzle_temp)) {
std::cout << "invalid nozzle temperature comment with invalid value!" << std::endl; std::string strS = rs + 1;
size_t pos = strS.find_first_of(" ;");
if (pos != std::string::npos)
strS = strS.substr(0, pos);
double temp_nozzle_temp;
if (!parse_double_from_str(strS, temp_nozzle_temp)) {
std::cout << "Invalid nozzle temperature: " << strS << std::endl;
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
if (is_multi_nozzle == true) {
const char* rt = strchr(c, 'T');
if (rt) {
std::string strT = rt + 1;
size_t posT = strT.find_first_of(" ;");
if (posT != std::string::npos)
strT = strT.substr(0, posT);
int logic_nozzle_id = physical_to_logic_extruder_map[std::stoi(strT)];
multi_nozzle_temp[logic_nozzle_id] = temp_nozzle_temp;
}
else {
multi_nozzle_temp[current_nozzle_id] = temp_nozzle_temp;
}
}
else {
nozzle_temp = temp_nozzle_temp;
}
return GCodeCheckResult::Success; return GCodeCheckResult::Success;
} }
@@ -689,6 +785,16 @@ GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
return GCodeCheckResult::Success; return GCodeCheckResult::Success;
} }
void GCodeChecker::set_current_nozzle(int filament_id) {
if (filament_id >= 0 && filament_id < static_cast<int>(filament_map.size())) {
current_nozzle_id = filament_map[filament_id];
}
else {
std::cerr << "Error: filament_id is out of range!" << std::endl;
current_nozzle_id = 0;
}
}
GCodeCheckResult GCodeChecker::check_G2_G3_width(const GCodeLine& line) GCodeCheckResult GCodeChecker::check_G2_G3_width(const GCodeLine& line)
{ {
auto absolute_position = [this](Axis axis, const GCodeLine& lineG2_3) { auto absolute_position = [this](Axis axis, const GCodeLine& lineG2_3) {

View File

@@ -5,6 +5,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <array> #include <array>
#include <map>
namespace QIDIStudio { namespace QIDIStudio {
@@ -116,6 +117,7 @@ private:
GCodeCheckResult check_line_width(const GCodeLine& gcode_line); GCodeCheckResult check_line_width(const GCodeLine& gcode_line);
GCodeCheckResult check_G0_G1_width(const GCodeLine& gcode_line); GCodeCheckResult check_G0_G1_width(const GCodeLine& gcode_line);
GCodeCheckResult check_G2_G3_width(const GCodeLine& gcode_line); GCodeCheckResult check_G2_G3_width(const GCodeLine& gcode_line);
void set_current_nozzle(int id);
double calculate_G1_width(const std::array<double, 3>& source, double calculate_G1_width(const std::array<double, 3>& source,
const std::array<double, 3>& target, const std::array<double, 3>& target,
@@ -214,12 +216,22 @@ private:
bool check_gap_infill_width = false; bool check_gap_infill_width = false;
int filament_id; int filament_id;
double flow_ratio = 0; double flow_ratio = 0;
double nozzle_temp = 0.0f; double nozzle_temp = 0.0f;
std::array<double, 2> multi_nozzle_temp = { 0.0, 0.0 };
int current_nozzle_id = 0;
std::vector<double> filament_map;
std::map<int, int> physical_to_logic_extruder_map;
std::map<int, int> logic_to_physical_extruder_map;
std::vector<double> filament_flow_ratio; std::vector<double> filament_flow_ratio;
std::vector<double> nozzle_temperature; std::vector<double> nozzle_temperature;
std::vector<double> nozzle_temperature_initial_layer; std::vector<double> nozzle_temperature_initial_layer;
bool has_scarf_joint_seam = false; bool has_scarf_joint_seam = false;
bool is_wipe_tower = false; bool is_wipe_tower = false;
bool is_multi_nozzle = false;
}; };
} }

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

View File

@@ -1,6 +1,69 @@
src/libslic3r/PresetBundle.cpp
src/slic3r/GUI/DeviceCore/DevAxis.cpp
src/slic3r/GUI/DeviceCore/DevBed.cpp
src/slic3r/GUI/DeviceCore/DevBed.h
src/slic3r/GUI/DeviceCore/DevConfig.h
src/slic3r/GUI/DeviceCore/DevConfig.cpp
src/slic3r/GUI/DeviceCore/DevConfigUtil.h
src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp
src/slic3r/GUI/DeviceCore/DevCtrl.h
src/slic3r/GUI/DeviceCore/DevCtrl.cpp
src/slic3r/GUI/DeviceCore/DevDefs.h
src/slic3r/GUI/DeviceCore/DevExtensionTool.h
src/slic3r/GUI/DeviceCore/DevExtensionTool.cpp
src/slic3r/GUI/DeviceCore/DevExtruderSystem.h
src/slic3r/GUI/DeviceCore/DevExtruderSystem.cpp
src/slic3r/GUI/DeviceCore/DevExtruderSystemCtrl.cpp
src/slic3r/GUI/DeviceCore/DevFan.cpp
src/slic3r/GUI/DeviceCore/DevFan.h
src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h
src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.cpp
src/slic3r/GUI/DeviceCore/DevFilaBlackList.h
src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp
src/slic3r/GUI/DeviceCore/DevFilaSystem.h
src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp
src/slic3r/GUI/DeviceCore/DevFirmware.h
src/slic3r/GUI/DeviceCore/DevFirmware.cpp
src/slic3r/GUI/DeviceCore/DevPrintOptions.h
src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp
src/slic3r/GUI/DeviceCore/DevPrintTaskInfo.h
src/slic3r/GUI/DeviceCore/DevPrintTaskInfo.cpp
src/slic3r/GUI/DeviceCore/DevHMS.h
src/slic3r/GUI/DeviceCore/DevHMS.cpp
src/slic3r/GUI/DeviceCore/DevStorage.h
src/slic3r/GUI/DeviceCore/DevStorage.cpp
src/slic3r/GUI/DeviceCore/DevInfo.h
src/slic3r/GUI/DeviceCore/DevInfo.cpp
src/slic3r/GUI/DeviceCore/DevLamp.h
src/slic3r/GUI/DeviceCore/DevLamp.cpp
src/slic3r/GUI/DeviceCore/DevLampCtrl.cpp
src/slic3r/GUI/DeviceCore/DevManager.h
src/slic3r/GUI/DeviceCore/DevManager.cpp
src/slic3r/GUI/DeviceCore/DevMapping.h
src/slic3r/GUI/DeviceCore/DevMapping.cpp
src/slic3r/GUI/DeviceCore/DevNozzleRack.h
src/slic3r/GUI/DeviceCore/DevNozzleRack.cpp
src/slic3r/GUI/DeviceCore/DevNozzleRackCtrl.cpp
src/slic3r/GUI/DeviceCore/DevNozzleSystem.h
src/slic3r/GUI/DeviceCore/DevNozzleSystem.cpp
src/slic3r/GUI/DeviceCore/DevUpgrade.h
src/slic3r/GUI/DeviceCore/DevUpgrade.cpp
src/slic3r/GUI/DeviceCore/DevUtil.h
src/slic3r/GUI/DeviceCore/DevUtil.cpp
src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h
src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp
src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h
src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.cpp
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.h
src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp
src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp
src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp
src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp
src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp
src/slic3r/GUI/Gizmos/GLGizmoMove.cpp src/slic3r/GUI/Gizmos/GLGizmoMove.cpp
src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp
src/slic3r/GUI/Gizmos/GLGizmoScale.cpp src/slic3r/GUI/Gizmos/GLGizmoScale.cpp
@@ -16,6 +79,10 @@ src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp
src/slic3r/GUI/Gizmos/GLGizmoText.cpp src/slic3r/GUI/Gizmos/GLGizmoText.cpp
src/slic3r/GUI/Gizmos/GLGizmoText.hpp src/slic3r/GUI/Gizmos/GLGizmoText.hpp
src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp
src/slic3r/GUI/Gizmos/GLGizmoBrimEars.hpp
src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
src/slic3r/GUI/Gizmos/GLGizmoSVG.hpp
src/slic3r/GUI/GUI.cpp src/slic3r/GUI/GUI.cpp
src/slic3r/GUI/GUI_App.cpp src/slic3r/GUI/GUI_App.cpp
src/slic3r/GUI/GUI_AuxiliaryList.cpp src/slic3r/GUI/GUI_AuxiliaryList.cpp
@@ -33,16 +100,22 @@ src/slic3r/GUI/HintNotification.cpp
src/slic3r/GUI/IMSlider.cpp src/slic3r/GUI/IMSlider.cpp
src/slic3r/GUI/Widgets/SideTools.cpp src/slic3r/GUI/Widgets/SideTools.cpp
src/slic3r/GUI/Widgets/AMSControl.cpp 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/ImGuiWrapper.cpp src/slic3r/GUI/ImGuiWrapper.cpp
src/slic3r/GUI/Jobs/ArrangeJob.cpp src/slic3r/GUI/Jobs/ArrangeJob.cpp
src/slic3r/GUI/Jobs/OrientJob.cpp src/slic3r/GUI/Jobs/OrientJob.cpp
src/slic3r/GUI/Jobs/FillBedJob.cpp src/slic3r/GUI/Jobs/FillBedJob.cpp
src/slic3r/GUI/Jobs/EmbossJob.cpp
src/slic3r/GUI/Jobs/Job.cpp src/slic3r/GUI/Jobs/Job.cpp
src/slic3r/GUI/Jobs/PlaterJob.cpp src/slic3r/GUI/Jobs/PlaterJob.cpp
src/slic3r/GUI/Jobs/RotoptimizeJob.cpp src/slic3r/GUI/Jobs/RotoptimizeJob.cpp
src/slic3r/GUI/Jobs/BindJob.cpp src/slic3r/GUI/Jobs/BindJob.cpp
src/slic3r/GUI/Jobs/PrintJob.cpp src/slic3r/GUI/Jobs/PrintJob.cpp
src/slic3r/GUI/Jobs/SendJob.cpp src/slic3r/GUI/Jobs/SendJob.cpp
src/slic3r/GUI/ThermalPreconditioningDialog.cpp
src/slic3r/GUI/ThermalPreconditioningDialog.hpp
src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/Jobs/SLAImportJob.cpp
src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp
src/slic3r/GUI/AboutDialog.cpp src/slic3r/GUI/AboutDialog.cpp
@@ -58,8 +131,12 @@ src/slic3r/GUI/BedShapeDialog.cpp
src/slic3r/GUI/BedShapeDialog.hpp src/slic3r/GUI/BedShapeDialog.hpp
src/slic3r/GUI/ConfigManipulation.cpp src/slic3r/GUI/ConfigManipulation.cpp
src/slic3r/GUI/DeviceManager.cpp src/slic3r/GUI/DeviceManager.cpp
src/slic3r/GUI/DeviceErrorDialog.cpp
src/slic3r/GUI/ExtraRenderers.cpp src/slic3r/GUI/ExtraRenderers.cpp
src/slic3r/GUI/Field.cpp src/slic3r/GUI/Field.cpp
src/slic3r/GUI/GCodeRenderer/AdvancedRenderer.cpp
src/slic3r/GUI/GCodeRenderer/BaseRenderer.cpp
src/slic3r/GUI/GCodeRenderer/LegacyRenderer.cpp
src/slic3r/GUI/GCodeViewer.cpp src/slic3r/GUI/GCodeViewer.cpp
src/slic3r/GUI/GLCanvas3D.cpp src/slic3r/GUI/GLCanvas3D.cpp
src/slic3r/GUI/Calibration.cpp src/slic3r/GUI/Calibration.cpp
@@ -70,9 +147,13 @@ src/slic3r/GUI/MainFrame.cpp
src/slic3r/GUI/MediaPlayCtrl.cpp src/slic3r/GUI/MediaPlayCtrl.cpp
src/slic3r/GUI/MediaFilePanel.cpp src/slic3r/GUI/MediaFilePanel.cpp
src/slic3r/GUI/ImageGrid.cpp src/slic3r/GUI/ImageGrid.cpp
src/slic3r/GUI/Widgets/ImageSwitchButton.cpp
src/slic3r/GUI/Printer/PrinterFileSystem.cpp src/slic3r/GUI/Printer/PrinterFileSystem.cpp
src/slic3r/GUI/Mouse3DController.cpp src/slic3r/GUI/Mouse3DController.cpp
src/slic3r/GUI/SelectMachinePop.cpp
src/slic3r/GUI/StatusPanel.cpp src/slic3r/GUI/StatusPanel.cpp
src/slic3r/GUI/StepMeshDialog.cpp
src/slic3r/GUI/StepMeshDialog.hpp
src/slic3r/GUI/Monitor.cpp src/slic3r/GUI/Monitor.cpp
src/slic3r/GUI/MsgDialog.cpp src/slic3r/GUI/MsgDialog.cpp
src/slic3r/GUI/NotificationManager.hpp src/slic3r/GUI/NotificationManager.hpp
@@ -81,6 +162,7 @@ src/slic3r/GUI/ObjectDataViewModel.cpp
src/slic3r/GUI/OpenGLManager.cpp src/slic3r/GUI/OpenGLManager.cpp
src/slic3r/GUI/OptionsGroup.cpp src/slic3r/GUI/OptionsGroup.cpp
src/slic3r/GUI/PrintOptionsDialog.cpp src/slic3r/GUI/PrintOptionsDialog.cpp
src/slic3r/GUI/SafetyOptionsDialog.cpp
src/slic3r/GUI/ParamsPanel.cpp src/slic3r/GUI/ParamsPanel.cpp
src/slic3r/GUI/PartPlate.cpp src/slic3r/GUI/PartPlate.cpp
src/slic3r/GUI/Plater.cpp src/slic3r/GUI/Plater.cpp
@@ -89,12 +171,14 @@ src/slic3r/GUI/PresetComboBoxes.cpp
src/slic3r/GUI/PresetHints.cpp src/slic3r/GUI/PresetHints.cpp
src/slic3r/GUI/ProgressStatusBar.cpp src/slic3r/GUI/ProgressStatusBar.cpp
src/slic3r/GUI/PlateSettingsDialog.cpp src/slic3r/GUI/PlateSettingsDialog.cpp
src/slic3r/GUI/PlateMoveDialog.cpp
src/slic3r/GUI/PrivacyUpdateDialog.cpp src/slic3r/GUI/PrivacyUpdateDialog.cpp
src/slic3r/GUI/PublishDialog.cpp src/slic3r/GUI/PublishDialog.cpp
src/slic3r/GUI/SavePresetDialog.cpp src/slic3r/GUI/SavePresetDialog.cpp
src/slic3r/GUI/Search.cpp src/slic3r/GUI/Search.cpp
src/slic3r/GUI/Selection.cpp src/slic3r/GUI/Selection.cpp
src/slic3r/GUI/SelectMachine.cpp src/slic3r/GUI/SelectMachine.cpp
src/slic3r/GUI/PrePrintChecker.cpp
src/slic3r/GUI/SendSystemInfoDialog.cpp src/slic3r/GUI/SendSystemInfoDialog.cpp
src/slic3r/GUI/SendToPrinter.cpp src/slic3r/GUI/SendToPrinter.cpp
src/slic3r/GUI/SlicingProgressNotification.cpp src/slic3r/GUI/SlicingProgressNotification.cpp
@@ -106,6 +190,7 @@ src/slic3r/GUI/Auxiliary.cpp
src/slic3r/GUI/UpdateDialogs.cpp src/slic3r/GUI/UpdateDialogs.cpp
src/slic3r/GUI/UnsavedChangesDialog.cpp src/slic3r/GUI/UnsavedChangesDialog.cpp
src/slic3r/GUI/ObjColorDialog.cpp src/slic3r/GUI/ObjColorDialog.cpp
src/slic3r/GUI/SyncAmsInfoDialog.cpp
src/slic3r/GUI/WipeTowerDialog.cpp src/slic3r/GUI/WipeTowerDialog.cpp
src/slic3r/GUI/wxExtensions.cpp src/slic3r/GUI/wxExtensions.cpp
src/slic3r/GUI/WebUserLoginDialog.cpp src/slic3r/GUI/WebUserLoginDialog.cpp
@@ -114,13 +199,17 @@ src/slic3r/GUI/KBShortcutsDialog.hpp
src/slic3r/GUI/KBShortcutsDialog.cpp src/slic3r/GUI/KBShortcutsDialog.cpp
src/slic3r/GUI/ReleaseNote.cpp src/slic3r/GUI/ReleaseNote.cpp
src/slic3r/GUI/ReleaseNote.hpp src/slic3r/GUI/ReleaseNote.hpp
src/slic3r/GUI/HelioReleaseNote.cpp
src/slic3r/GUI/HelioReleaseNote.hpp
src/slic3r/GUI/UpgradePanel.cpp src/slic3r/GUI/UpgradePanel.cpp
src/slic3r/GUI/Project.cpp
src/slic3r/Utils/FixModelByWin10.cpp src/slic3r/Utils/FixModelByWin10.cpp
src/slic3r/Utils/PresetUpdater.cpp src/slic3r/Utils/PresetUpdater.cpp
src/slic3r/Utils/Http.cpp src/slic3r/Utils/Http.cpp
src/slic3r/Utils/Process.cpp src/slic3r/Utils/Process.cpp
src/slic3r/GUI/Jobs/PrintJob.cpp src/slic3r/GUI/Jobs/PrintJob.cpp
src/libslic3r/GCode.cpp src/libslic3r/GCode.cpp
src/libslic3r/GCode/ToolOrdering.cpp
src/libslic3r/ExtrusionEntity.cpp src/libslic3r/ExtrusionEntity.cpp
src/libslic3r/Flow.cpp src/libslic3r/Flow.cpp
src/libslic3r/Format/AMF.cpp src/libslic3r/Format/AMF.cpp
@@ -140,13 +229,16 @@ src/slic3r/GUI/CalibrationWizardPage.cpp
src/slic3r/GUI/CalibrationPanel.cpp src/slic3r/GUI/CalibrationPanel.cpp
src/slic3r/GUI/CalibrationWizard.cpp src/slic3r/GUI/CalibrationWizard.cpp
src/slic3r/GUI/CalibrationWizardStartPage.cpp src/slic3r/GUI/CalibrationWizardStartPage.cpp
src/slic3r/GUI/CalibrationWizardSavePage.cpp
src/slic3r/GUI/CalibrationWizardPresetPage.cpp src/slic3r/GUI/CalibrationWizardPresetPage.cpp
src/slic3r/GUI/CalibrationWizardCaliPage.cpp
src/slic3r/GUI/CaliHistoryDialog.cpp src/slic3r/GUI/CaliHistoryDialog.cpp
src/slic3r/GUI/calib_dlg.cpp src/slic3r/GUI/calib_dlg.cpp
src/slic3r/GUI/BonjourDialog.cpp src/slic3r/GUI/BonjourDialog.cpp
src/slic3r/GUI/calib_dlg.cpp src/slic3r/GUI/calib_dlg.cpp
src/slic3r/GUI/PrintHostDialogs.cpp src/slic3r/GUI/PrintHostDialogs.cpp
src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp
src/slic3r/GUI/UIHelpers/MeshBooleanUI.cpp
src/slic3r/GUI/NetworkTestDialog.cpp src/slic3r/GUI/NetworkTestDialog.cpp
src/slic3r/GUI/CreatePresetsDialog.cpp src/slic3r/GUI/CreatePresetsDialog.cpp
src/slic3r/GUI/DailyTips.cpp src/slic3r/GUI/DailyTips.cpp
@@ -159,8 +251,25 @@ src/slic3r/Utils/MKS.cpp
src/slic3r/Utils/OctoPrint.cpp src/slic3r/Utils/OctoPrint.cpp
src/slic3r/Utils/Repetier.cpp src/slic3r/Utils/Repetier.cpp
src/slic3r/Utils/ProfileDescription.hpp src/slic3r/Utils/ProfileDescription.hpp
src/slic3r/Utils/HelioDragon.cpp
src/slic3r/GUI/SendMultiMachinePage.cpp src/slic3r/GUI/SendMultiMachinePage.cpp
src/slic3r/GUI/MultiMachinePage.cpp src/slic3r/GUI/MultiMachinePage.cpp
src/slic3r/GUI/MultiMachineManagerPage.cpp src/slic3r/GUI/MultiMachineManagerPage.cpp
src/slic3r/GUI/MultiTaskManagerPage.cpp src/slic3r/GUI/MultiTaskManagerPage.cpp
src/slic3r/GUI/MultiMachine.cpp src/slic3r/GUI/MultiMachine.cpp
src/slic3r/GUI/UserPresetsDialog.cpp
src/slic3r/GUI/FilamentMapDialog.cpp
src/slic3r/GUI/FilamentGroupPopup.cpp
src/slic3r/GUI/FilamentMapPanel.cpp
src/slic3r/GUI/PartSkipDialog.cpp
src/slic3r/GUI/PartSkipDialog.hpp
src/slic3r/GUI/SkipPartCanvas.cpp
src/slic3r/GUI/SkipPartCanvas.hpp
src/slic3r/GUI/FilamentBitmapUtils.cpp
src/slic3r/GUI/FilamentBitmapUtils.hpp
src/slic3r/GUI/FilamentPickerDialog.cpp
src/slic3r/GUI/FilamentPickerDialog.hpp
src/slic3r/GUI/Widgets/MultiNozzleSync.cpp
src/slic3r/GUI/Widgets/MultiNozzleSync.hpp
src/slic3r/GUI/PurgeModeDialog.cpp
src/slic3r/GUI/PurgeModeDialog.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 KiB

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,92 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFfzCCA2egAwIBAgIUXtzR6tRiL/RHBRXOoyFU0+XrliowDQYJKoZIhvcNAQEL
BQAwRjELMAkGA1UEBhMCQ04xITAfBgNVBAoMGEJCTCBUZWNobm9sb2dpZXMgQ28u
IEx0ZDEUMBIGA1UEAwwLQkJMIENBMiBSU0EwIBcNMjUwNjE3MDEzODA4WhgPMjA1
MDA2MTcwMTM4MDhaMEYxCzAJBgNVBAYTAkNOMSEwHwYDVQQKDBhCQkwgVGVjaG5v
bG9naWVzIENvLiBMdGQxFDASBgNVBAMMC0JCTCBDQTIgUlNBMIICIjANBgkqhkiG
9w0BAQEFAAOCAg8AMIICCgKCAgEAo4550G4c42gTKzQqixwKT089RizIdZpyOcGA
679rPaOdWsMqVwnYPP2FpMqXKkjFbedE+SpGloi2NKCuiPNVRbq9PHOOZwTs7YLo
bOwf53FJuO6vRFpzFfX1tlc9zlFqJvZnYO9NgHpMysidocWcgrDN/SIDywgPB5CV
bYg3Vvzua9fwZx9e5KT9xd5IpTqdTrWS47jQOVKLhdQCbJFIlMrblOwLBAx+fHok
wqh6tkI6Ktuyyjw8Dysebi1ndWjKtZ2mW47r8xZ/J+z3EZqcyJMY6MRtx/zb1jBF
uHtkjrb5Kv1DMzSKlkaNJIbvC+Mk+hI97W+SjLSRuIdC7+oJUzWaSzgu9cjXCVfm
q8t4IL/35hP69PK95LgLectIrP96CYAT/aVMG19FrFW0QWEyfT+kzG4jkumfPbHq
Y2nNkEN0+tjj3h4WdzrWgQEojK/lhfcRFVkts74+aZoMpQP+vmL17CKmSzXk5o/e
K21xgxJdzMbdztfTpibiXk0abfOpN+1VR+3NYa+bROAKNyGaReEGsyW2bjcjNx51
5Vqzj3SVxhMSp5vfF9E4A1jE99M/l9jQDM6RzkT0lMccGAd5tUSdNvDlrqtQaQiK
v/ZsXPgXLTWfOpvaLNEgwdMgZMuhjpkwvAZyoYfeF9kyydjDh7bvrX//cz/VopAU
lxUtQtMCAwEAAaNjMGEwHQYDVR0OBBYEFNVJgQad1sNTN0jxVkwbJ/XM1an1MB8G
A1UdIwQYMBaAFNVJgQad1sNTN0jxVkwbJ/XM1an1MA8GA1UdEwEB/wQFMAMBAf8w
DgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQBFZDKMJfp/N4gBeFHh
MiFehaUyMS6e9mzrTfMLJLJoj6Jopa9V9jIfcCEBGZuRThqFcATV+UdFHSINpUcH
upcCYnazTRC4dn1hnxnQ1ojQcHxdGp9xGw/YclAKD97d8bPShfBMT1to9zbMK7T5
L8zgqg01YIOKjQk0Hcd0+0iUr6m8zQ5P8Rl3QXqAyeWgqmYQrrjTWwPsgdfHNXKX
vDrx7/cqry5lKU802hUplKMBxelv4W8407Ytj1lfJOwvxqxxsFU5jSwcUG3zo2vk
QtjRs8m5BKup5K1OPYkkPu7Ld89X0XpU073/dNDG11uxb1eDKrtNP6vZuZjNE2Pq
8HCoI1EtP+ItyqtUMvHi6Z2zsmlA25broVioeUKxjlIecpQ9JR/FhDu9CWNF/nDW
LSORNaMMzgsMSzI+HCiUhqN+qMIvVP6rzGTJzwqz/lc5Lf+ZPCnGA9WJTT4uPIhf
ufbZmnUJ35WuWKHxovDsqBh88zQ9sZ+ei4Hi4vVzOhUgfG3aLoSQEYqRoqaboANh
wCwzyuW2Rv54u5QSBbd6Gx1OpvsWmLPWd2/iL2kISl5wfmLGVydvSJa+rbOfuAy7
ycVQacVDQCAnbhoVrQy7+454QsKSW3ZV6BcyRrorewCyCYgd7nyxflxHZTBEykXX
haGNe/KFNvJBMOIuIUzknRRmiQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB8zCCAZmgAwIBAgIUe61jGQ4RzIC8k+sNuqbI/CaNqPIwCgYIKoZIzj0EAwIw
RjELMAkGA1UEBhMCQ04xITAfBgNVBAoMGEJCTCBUZWNobm9sb2dpZXMgQ28uIEx0
ZDEUMBIGA1UEAwwLQkJMIENBMiBFQ0MwIBcNMjUwNjE3MDEzODM1WhgPMjA1MDA2
MTcwMTM4MzVaMEYxCzAJBgNVBAYTAkNOMSEwHwYDVQQKDBhCQkwgVGVjaG5vbG9n
aWVzIENvLiBMdGQxFDASBgNVBAMMC0JCTCBDQTIgRUNDMFkwEwYHKoZIzj0CAQYI
KoZIzj0DAQcDQgAEpKTF7wRSty4DXpGJzgCPwRh8ghLlxUC3qJbyEgLqTvJgbiwY
APPHK7kVbVmerkqhHOT4QeWRlTG3dOQGLA2VpaNjMGEwHQYDVR0OBBYEFKuRpsjY
REOyIKH7HwOE6jhGBd6NMB8GA1UdIwQYMBaAFKuRpsjYREOyIKH7HwOE6jhGBd6N
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMCA0gA
MEUCIErBiUm3VdtP3rz4kb8aLpI5p+BzL7M9vElBGWWJxpHMAiEA3r5tJWVGwuxi
YCrB1c40KYFRFyahGrhOJZAj/YhRdnU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEeTCCA2GgAwIBAgIUOq+lNIaC2xsswkFqj5JPyVBl45cwDQYJKoZIhvcNAQEL
BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u
LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yNTA2MTcwMjAxMjdaFw0zNTA2MTUw
MjAxMjdaMEYxCzAJBgNVBAYTAkNOMSEwHwYDVQQKDBhCQkwgVGVjaG5vbG9naWVz
IENvLiBMdGQxFDASBgNVBAMMC0JCTCBDQTIgUlNBMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAo4550G4c42gTKzQqixwKT089RizIdZpyOcGA679rPaOd
WsMqVwnYPP2FpMqXKkjFbedE+SpGloi2NKCuiPNVRbq9PHOOZwTs7YLobOwf53FJ
uO6vRFpzFfX1tlc9zlFqJvZnYO9NgHpMysidocWcgrDN/SIDywgPB5CVbYg3Vvzu
a9fwZx9e5KT9xd5IpTqdTrWS47jQOVKLhdQCbJFIlMrblOwLBAx+fHokwqh6tkI6
Ktuyyjw8Dysebi1ndWjKtZ2mW47r8xZ/J+z3EZqcyJMY6MRtx/zb1jBFuHtkjrb5
Kv1DMzSKlkaNJIbvC+Mk+hI97W+SjLSRuIdC7+oJUzWaSzgu9cjXCVfmq8t4IL/3
5hP69PK95LgLectIrP96CYAT/aVMG19FrFW0QWEyfT+kzG4jkumfPbHqY2nNkEN0
+tjj3h4WdzrWgQEojK/lhfcRFVkts74+aZoMpQP+vmL17CKmSzXk5o/eK21xgxJd
zMbdztfTpibiXk0abfOpN+1VR+3NYa+bROAKNyGaReEGsyW2bjcjNx515Vqzj3SV
xhMSp5vfF9E4A1jE99M/l9jQDM6RzkT0lMccGAd5tUSdNvDlrqtQaQiKv/ZsXPgX
LTWfOpvaLNEgwdMgZMuhjpkwvAZyoYfeF9kyydjDh7bvrX//cz/VopAUlxUtQtMC
AwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
BBYEFNVJgQad1sNTN0jxVkwbJ/XM1an1MB8GA1UdIwQYMBaAFI80QmjcZ06PxCKe
xXxJ5avdRL4eMA0GCSqGSIb3DQEBCwUAA4IBAQAvS8tyfagaGsFf9YncA2ko/Na5
9BVF+8TlUo+32oznwIVpS1AhSgLP6rNVekXNFKbuP5htudLQ17ZRBJI/UMVyYEDq
IN7xv7Zj+zJwF6W6haYrjb2Vk8igw1XvNULZfvVNNKIkvJUiVqEslWrC+k74crk/
Wv8ChVf+zqvfIN6LV3esaGRL02J3AprQGb7DDhR1EefQMScDkNpGJMUmvCmfknrl
iK8qgvQN1SWO7JRf6fNKHsN1ZQvyP0pgLWxpT3V0/0/WttqX3cMGuJF+jVUzm/Nh
xYhFewG8vc3KzTjnwQApMA6CW554FOJWFyOD2jn5yJLT3Vue+aYDQRp4bKMx
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICrjCCAZagAwIBAgIUOq+lNIaC2xsswkFqj5JPyVBl45gwDQYJKoZIhvcNAQEL
BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u
LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yNTA2MTcwMjAxNDdaFw0zNTA2MTUw
MjAxNDdaMEYxCzAJBgNVBAYTAkNOMSEwHwYDVQQKDBhCQkwgVGVjaG5vbG9naWVz
IENvLiBMdGQxFDASBgNVBAMMC0JCTCBDQTIgRUNDMFkwEwYHKoZIzj0CAQYIKoZI
zj0DAQcDQgAEpKTF7wRSty4DXpGJzgCPwRh8ghLlxUC3qJbyEgLqTvJgbiwYAPPH
K7kVbVmerkqhHOT4QeWRlTG3dOQGLA2VpaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAO
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFKuRpsjYREOyIKH7HwOE6jhGBd6NMB8G
A1UdIwQYMBaAFI80QmjcZ06PxCKexXxJ5avdRL4eMA0GCSqGSIb3DQEBCwUAA4IB
AQCg6PjUSSZV+4bvejcVMvgXmKzfD95osWn0ctnoMBxPDa+m+Gg+BcLT2IlFAe3E
KYMvu4T295WQc92rjKYqW6cirFppng9uEFW2mZLimxaSmutsTftE3sbMVMJ/SLYN
PV7TFv6mcBSIFWXwmBOIpbh4BUcVfONTvdSfIqfyAVxsq4xzc2nc6hPBpAm21Ayj
ToC1ev/TbDJ8VllFZiEVmWWlIP3aNzAm8S2mOpxPB2WnanaZHSrvXLFhstyzwrjD
yO1/isOZ7wtr7rcuTJdEvvvCimOZlkfRhaDoTew9tQ0E2FVpzzSinw02qmQ1xIE9
5/H5ZzJSPkpeAHWEPnKkxg0v
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDZTCCAk2gAwIBAgIUV1FckwXElyek1onFnQ9kL7Bk4N8wDQYJKoZIhvcNAQEL MIIDZTCCAk2gAwIBAgIUV1FckwXElyek1onFnQ9kL7Bk4N8wDQYJKoZIhvcNAQEL
BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u
LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yMjA0MDQwMzQyMTFaFw0zMjA0MDEw LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yMjA0MDQwMzQyMTFaFw0zMjA0MDEw

View File

@@ -0,0 +1,79 @@
[hint: Single-Material Only]
text = Single-Material Only\nHelio currently simulates one material and one nozzle per job. Multi-material or multi-extruder G-code adds long pauses that break thermal continuity, so results wouldnt be meaningful.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio0.png
[hint: One Plate per Job]
text = One Plate per Job\nUpload G-code with a single build plate—multi-plate projects arent yet supported, so only the first plate would run.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio1.png
[hint: What is the Thermal Quality Index?]
text = What is the Thermal Quality Index?\nThe Thermal Quality Index (scale 100 to +100) shows how hot or cold each region prints—green (≈ 0) is the “just right” zone for strong, warp-free parts. Keep most of the part green for best results.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio2.png
[hint: Voxel-Level Accuracy]
text = Voxel-Level Accuracy\nWe predict temperature in every voxel at every time-step, and for standard jobs the forecast is typically within ±510 °C. Pauses, custom firmware or odd cooling can widen that margin.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio3.png
[hint: Fan & Airflow Model]
text = Fan & Airflow Model\nA simplified fan-and-room model shows how cooling settings change part temps without slow CFD maths—great for day-to-day tuning. Chamber vortices arent yet simulated so runs stay fast.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio0.png
[hint: TQI Limits Explained]
text = TQI Limits Explained\n-100 → too cold: tensile strength is ~50 % lower than parts printed at the ideal 0 (ASTM D638 dog-bone tests). +100 → too hot: layers stay molten and may sag or collapse. Keep regions near 0 for peak strength and accuracy.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio1.png
[hint: What Drives Runtime?]
text = What Drives Runtime?\nExtra layers, dense infill, lots of tiny arcs (small mesh elements) or very slow printing speeds all extend simulation time because the solver must step through more seconds. Multi-core CPUs or CUDA GPUs speed things up.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio2.png
[hint: Nozzle Temp Range]
text = Nozzle Temp Range\nSupported set-points are 190 320 °C; anything outside is clamped to keep physics realistic.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio3.png
[hint: Debugging Flowchart]
text = Debugging Flowchart\nNot sure why a result looks off? Follow our step-by-step debugging flowchart to trace settings, G-code and material issues in minutes.
documentation_link = https://wiki.helioadditive.com/en/flowchart
image = images/dailytips_helio0.png
[hint: Why Cooling Varies]
text = Why Cooling Varies\nOuter walls and bridges cool fastest while thick interiors stay warmer—geometry, airflow and tool-path all play a part, and the simulation visualises these differences.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio1.png
[hint: Extrusion Temp Model]
text = Extrusion Temp Model\nMaterial properties shape the melt curve, but printer geometry decides how much heat the filament actually gains, so the model is material-specific and printer-calibrated.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio2.png
[hint: Nozzle setting of 190 °C vs 320 °C?]
text = Nozzle setting of 190 °C vs 320 °C?\nA 100 °C nozzle change only nudges the thermal index because extrusion temp, flow rate and post-deposition cooling dominate the parts heat history.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio3.png
[hint: Bed Temperature influence]
text = Bed Temperature influence\nOnly the first-layer bed temp feeds the model right now; later bed changes arent yet captured.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio0.png
[hint: Actual Tool-Path]
text = Actual Tool-Path\nYes—your exact G-code path, speeds and fan commands are simulated.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio1.png
[hint: Mesh Resolution]
text = Mesh Resolution\nThe voxel grid is finer than the G-code line spacing, capturing layer-by-layer detail without wasting compute.
documentation_link = https://wiki.helioadditive.com/en/FAQ
image = images/dailytips_helio2.png
[hint: Shrinkage, Warping & Stress]
text = Shrinkage, Warping & Stress\nBy controlling the thermal index you can remove the heat-driven causes of warp and stress.
documentation_link = https://wiki.helioadditive.com/en/flowchart
image = images/dailytips_helio3.png

View File

@@ -0,0 +1,329 @@
colors
#000000 #FFFFFF #545454 #8E9089 #C12E1F #F4EE2A #0086D6 #F7E6DE #4479fb #5E43B7 #482960 #0056B8 #FEC600 #EC008C #F5547C #6F5034 #FF9016 #00B1B7 #BECF00
src dst flush
#000000 #FFFFFF 900
#000000 #545454 270
#000000 #C12E1F 900
#000000 #F4EE2A 900
#000000 #0086D6 900
#000000 #F7E6DE 900
#000000 #4479fb 900
#000000 #5E43B7 900
#000000 #482960 360
#000000 #0056B8 660
#000000 #FEC600 900
#000000 #EC008C 900
#000000 #F5547C 900
#000000 #6F5034 510
#000000 #FF9016 900
#000000 #BECF00 900
#FFFFFF #000000 120
#FFFFFF #545454 150
#FFFFFF #8E9089 120
#FFFFFF #C12E1F 120
#FFFFFF #F4EE2A 150
#FFFFFF #0086D6 90
#FFFFFF #F7E6DE 120
#FFFFFF #4479fb 120
#FFFFFF #5E43B7 150
#FFFFFF #482960 120
#FFFFFF #0056B8 150
#FFFFFF #FEC600 120
#FFFFFF #EC008C 150
#FFFFFF #F5547C 120
#FFFFFF #6F5034 150
#FFFFFF #FF9016 120
#FFFFFF #00B1B7 90
#FFFFFF #BECF00 120
#545454 #000000 150
#545454 #FFFFFF 480
#545454 #8E9089 210
#545454 #C12E1F 270
#545454 #F4EE2A 390
#545454 #0086D6 240
#545454 #F7E6DE 360
#545454 #4479fb 330
#545454 #5E43B7 180
#545454 #482960 150
#545454 #0056B8 180
#545454 #FEC600 300
#545454 #EC008C 240
#545454 #F5547C 330
#545454 #6F5034 120
#545454 #FF9016 330
#545454 #00B1B7 270
#545454 #BECF00 330
#8E9089 #000000 180
#8E9089 #FFFFFF 330
#8E9089 #545454 180
#8E9089 #C12E1F 180
#8E9089 #F4EE2A 360
#8E9089 #0086D6 180
#8E9089 #F7E6DE 360
#8E9089 #4479fb 120
#8E9089 #5E43B7 240
#8E9089 #482960 240
#8E9089 #0056B8 150
#8E9089 #FEC600 330
#8E9089 #EC008C 270
#8E9089 #F5547C 240
#8E9089 #6F5034 300
#8E9089 #FF9016 300
#8E9089 #00B1B7 180
#8E9089 #BECF00 300
#C12E1F #000000 150
#C12E1F #FFFFFF 600
#C12E1F #545454 570
#C12E1F #8E9089 390
#C12E1F #F4EE2A 900
#C12E1F #0086D6 900
#C12E1F #F7E6DE 900
#C12E1F #4479fb 540
#C12E1F #5E43B7 570
#C12E1F #482960 210
#C12E1F #0056B8 630
#C12E1F #FEC600 420
#C12E1F #EC008C 270
#C12E1F #F5547C 300
#C12E1F #6F5034 300
#C12E1F #FF9016 390
#C12E1F #00B1B7 600
#C12E1F #BECF00 660
#F4EE2A #000000 150
#F4EE2A #FFFFFF 660
#F4EE2A #545454 420
#F4EE2A #8E9089 300
#F4EE2A #C12E1F 180
#F4EE2A #0086D6 900
#F4EE2A #F7E6DE 900
#F4EE2A #4479fb 180
#F4EE2A #5E43B7 690
#F4EE2A #0056B8 360
#F4EE2A #FEC600 120
#F4EE2A #EC008C 600
#F4EE2A #F5547C 240
#F4EE2A #6F5034 270
#F4EE2A #FF9016 120
#F4EE2A #00B1B7 630
#F4EE2A #BECF00 120
#0086D6 #000000 120
#0086D6 #FFFFFF 510
#0086D6 #545454 150
#0086D6 #8E9089 180
#0086D6 #C12E1F 300
#0086D6 #F4EE2A 360
#0086D6 #F7E6DE 480
#0086D6 #4479fb 120
#0086D6 #5E43B7 210
#0086D6 #482960 120
#0086D6 #0056B8 150
#0086D6 #FEC600 330
#0086D6 #EC008C 330
#0086D6 #F5547C 330
#0086D6 #6F5034 150
#0086D6 #FF9016 300
#0086D6 #00B1B7 120
#0086D6 #BECF00 360
#F7E6DE #000000 150
#F7E6DE #FFFFFF 150
#F7E6DE #545454 120
#F7E6DE #8E9089 150
#F7E6DE #C12E1F 150
#F7E6DE #F4EE2A 120
#F7E6DE #0086D6 180
#F7E6DE #4479fb 150
#F7E6DE #5E43B7 210
#F7E6DE #482960 150
#F7E6DE #0056B8 150
#F7E6DE #FEC600 120
#F7E6DE #EC008C 150
#F7E6DE #F5547C 150
#F7E6DE #6F5034 150
#F7E6DE #FF9016 120
#F7E6DE #00B1B7 120
#F7E6DE #BECF00 120
#4479fb #000000 120
#4479fb #FFFFFF 690
#4479fb #545454 330
#4479fb #8E9089 330
#4479fb #C12E1F 270
#4479fb #F4EE2A 480
#4479fb #0086D6 750
#4479fb #F7E6DE 900
#4479fb #5E43B7 450
#4479fb #482960 210
#4479fb #0056B8 240
#4479fb #FEC600 420
#4479fb #F5547C 390
#4479fb #6F5034 210
#4479fb #FF9016 420
#4479fb #00B1B7 390
#4479fb #BECF00 300
#5E43B7 #000000 150
#5E43B7 #FFFFFF 360
#5E43B7 #545454 150
#5E43B7 #8E9089 180
#5E43B7 #C12E1F 270
#5E43B7 #F4EE2A 570
#5E43B7 #0086D6 240
#5E43B7 #F7E6DE 660
#5E43B7 #4479fb 240
#5E43B7 #482960 240
#5E43B7 #0056B8 150
#5E43B7 #FEC600 390
#5E43B7 #EC008C 330
#5E43B7 #F5547C 270
#5E43B7 #6F5034 150
#5E43B7 #FF9016 300
#5E43B7 #00B1B7 270
#5E43B7 #BECF00 390
#482960 #000000 120
#482960 #FFFFFF 570
#482960 #545454 240
#482960 #8E9089 330
#482960 #C12E1F 480
#482960 #F4EE2A 780
#482960 #0086D6 420
#482960 #F7E6DE 900
#482960 #4479fb 510
#482960 #5E43B7 270
#482960 #0056B8 420
#482960 #FEC600 540
#482960 #EC008C 480
#482960 #F5547C 390
#482960 #6F5034 270
#482960 #FF9016 510
#482960 #00B1B7 480
#482960 #BECF00 540
#0056B8 #000000 120
#0056B8 #FFFFFF 900
#0056B8 #545454 240
#0056B8 #8E9089 330
#0056B8 #C12E1F 570
#0056B8 #F4EE2A 900
#0056B8 #0086D6 210
#0056B8 #F7E6DE 780
#0056B8 #4479fb 300
#0056B8 #5E43B7 210
#0056B8 #482960 270
#0056B8 #FEC600 630
#0056B8 #EC008C 540
#0056B8 #F5547C 660
#0056B8 #6F5034 300
#0056B8 #FF9016 690
#0056B8 #00B1B7 240
#0056B8 #BECF00 540
#FEC600 #000000 120
#FEC600 #FFFFFF 630
#FEC600 #545454 540
#FEC600 #8E9089 480
#FEC600 #C12E1F 180
#FEC600 #F4EE2A 180
#FEC600 #0086D6 900
#FEC600 #F7E6DE 720
#FEC600 #4479fb 210
#FEC600 #5E43B7 900
#FEC600 #482960 330
#FEC600 #0056B8 900
#FEC600 #EC008C 660
#FEC600 #F5547C 390
#FEC600 #6F5034 330
#FEC600 #FF9016 270
#FEC600 #00B1B7 630
#FEC600 #BECF00 210
#EC008C #000000 120
#EC008C #FFFFFF 540
#EC008C #545454 270
#EC008C #8E9089 330
#EC008C #C12E1F 120
#EC008C #F4EE2A 900
#EC008C #0086D6 330
#EC008C #4479fb 450
#EC008C #5E43B7 210
#EC008C #482960 180
#EC008C #0056B8 300
#EC008C #FEC600 360
#EC008C #F5547C 210
#EC008C #6F5034 240
#EC008C #FF9016 240
#EC008C #00B1B7 450
#EC008C #BECF00 510
#F5547C #000000 120
#F5547C #FFFFFF 570
#F5547C #545454 210
#F5547C #8E9089 240
#F5547C #C12E1F 150
#F5547C #F4EE2A 750
#F5547C #0086D6 270
#F5547C #F7E6DE 900
#F5547C #4479fb 540
#F5547C #5E43B7 150
#F5547C #482960 180
#F5547C #0056B8 150
#F5547C #FEC600 330
#F5547C #EC008C 150
#F5547C #6F5034 180
#F5547C #FF9016 270
#F5547C #00B1B7 390
#F5547C #BECF00 360
#6F5034 #000000 150
#6F5034 #FFFFFF 600
#6F5034 #545454 150
#6F5034 #8E9089 270
#6F5034 #C12E1F 180
#6F5034 #F4EE2A 360
#6F5034 #0086D6 360
#6F5034 #F7E6DE 390
#6F5034 #4479fb 330
#6F5034 #5E43B7 240
#6F5034 #482960 180
#6F5034 #0056B8 300
#6F5034 #FEC600 300
#6F5034 #EC008C 270
#6F5034 #F5547C 240
#6F5034 #FF9016 270
#6F5034 #00B1B7 270
#6F5034 #BECF00 390
#FF9016 #000000 120
#FF9016 #FFFFFF 450
#FF9016 #545454 240
#FF9016 #8E9089 300
#FF9016 #C12E1F 150
#FF9016 #F4EE2A 480
#FF9016 #0086D6 660
#FF9016 #F7E6DE 690
#FF9016 #4479fb 360
#FF9016 #5E43B7 360
#FF9016 #482960 210
#FF9016 #0056B8 330
#FF9016 #FEC600 210
#FF9016 #EC008C 240
#FF9016 #F5547C 210
#FF9016 #6F5034 270
#FF9016 #00B1B7 390
#FF9016 #BECF00 330
#00B1B7 #FFFFFF 630
#00B1B7 #8E9089 240
#00B1B7 #F4EE2A 390
#00B1B7 #EC008C 240
#00B1B7 #6F5034 360
#00B1B7 #FF9016 300
#00B1B7 #00B1B7 390
#00B1B7 #BECF00 300
#BECF00 #000000 150
#BECF00 #FFFFFF 630
#BECF00 #8E9089 300
#BECF00 #C12E1F 150
#BECF00 #F4EE2A 150
#BECF00 #0086D6 270
#BECF00 #F7E6DE 540
#BECF00 #4479fb 150
#BECF00 #5E43B7 270
#BECF00 #482960 210
#BECF00 #0056B8 240
#BECF00 #FEC600 120
#BECF00 #EC008C 270
#BECF00 #F5547C 270
#BECF00 #6F5034 150
#BECF00 #FF9016 120
#BECF00 #00B1B7 330

View File

@@ -0,0 +1,338 @@
colors
#000000 #FFFFFF #545454 #8E9089 #C12E1F #F4EE2A #0086D6 #F7E6DE #4479fb #5E43B7 #482960 #0056B8 #FEC600 #EC008C #F5547C #6F5034 #FF9016 #00B1B7 #BECF00
src dst flush
#000000 #FFFFFF 900
#000000 #545454 450
#000000 #8E9089 540
#000000 #C12E1F 600
#000000 #F4EE2A 900
#000000 #0086D6 570
#000000 #F7E6DE 900
#000000 #4479fb 810
#000000 #5E43B7 480
#000000 #482960 270
#000000 #0056B8 540
#000000 #FEC600 900
#000000 #EC008C 900
#000000 #F5547C 900
#000000 #FF9016 900
#000000 #00B1B7 630
#000000 #BECF00 900
#FFFFFF #000000 90
#FFFFFF #545454 240
#FFFFFF #8E9089 120
#FFFFFF #C12E1F 90
#FFFFFF #F4EE2A 90
#FFFFFF #0086D6 90
#FFFFFF #F7E6DE 90
#FFFFFF #4479fb 120
#FFFFFF #5E43B7 90
#FFFFFF #0056B8 90
#FFFFFF #FEC600 150
#FFFFFF #EC008C 150
#FFFFFF #F5547C 120
#FFFFFF #6F5034 120
#FFFFFF #FF9016 120
#FFFFFF #00B1B7 120
#FFFFFF #BECF00 90
#545454 #000000 90
#545454 #FFFFFF 360
#545454 #8E9089 120
#545454 #C12E1F 270
#545454 #F4EE2A 330
#545454 #0086D6 270
#545454 #F7E6DE 390
#545454 #4479fb 270
#545454 #5E43B7 120
#545454 #482960 150
#545454 #0056B8 180
#545454 #FEC600 300
#545454 #EC008C 240
#545454 #F5547C 300
#545454 #6F5034 120
#545454 #FF9016 240
#545454 #00B1B7 270
#545454 #BECF00 300
#8E9089 #000000 270
#8E9089 #FFFFFF 330
#8E9089 #545454 300
#8E9089 #C12E1F 240
#8E9089 #F4EE2A 240
#8E9089 #0086D6 240
#8E9089 #F7E6DE 390
#8E9089 #4479fb 210
#8E9089 #5E43B7 270
#8E9089 #482960 300
#8E9089 #0056B8 180
#8E9089 #FEC600 240
#8E9089 #EC008C 240
#8E9089 #F5547C 240
#8E9089 #6F5034 210
#8E9089 #FF9016 240
#8E9089 #00B1B7 210
#8E9089 #BECF00 270
#C12E1F #000000 150
#C12E1F #FFFFFF 900
#C12E1F #545454 300
#C12E1F #8E9089 570
#C12E1F #F4EE2A 450
#C12E1F #0086D6 390
#C12E1F #F7E6DE 630
#C12E1F #4479fb 420
#C12E1F #5E43B7 330
#C12E1F #482960 210
#C12E1F #0056B8 300
#C12E1F #FEC600 660
#C12E1F #EC008C 240
#C12E1F #F5547C 180
#C12E1F #6F5034 210
#C12E1F #FF9016 270
#C12E1F #00B1B7 540
#C12E1F #BECF00 360
#F4EE2A #000000 150
#F4EE2A #FFFFFF 900
#F4EE2A #545454 390
#F4EE2A #8E9089 450
#F4EE2A #C12E1F 180
#F4EE2A #0086D6 270
#F4EE2A #F7E6DE 570
#F4EE2A #4479fb 120
#F4EE2A #5E43B7 330
#F4EE2A #482960 330
#F4EE2A #0056B8 240
#F4EE2A #FEC600 90
#F4EE2A #EC008C 330
#F4EE2A #F5547C 420
#F4EE2A #6F5034 240
#F4EE2A #FF9016 150
#F4EE2A #00B1B7 360
#F4EE2A #BECF00 240
#0086D6 #000000 150
#0086D6 #FFFFFF 420
#0086D6 #545454 120
#0086D6 #8E9089 480
#0086D6 #C12E1F 240
#0086D6 #F4EE2A 360
#0086D6 #F7E6DE 390
#0086D6 #4479fb 120
#0086D6 #5E43B7 150
#0086D6 #482960 150
#0086D6 #0056B8 120
#0086D6 #EC008C 330
#0086D6 #F5547C 330
#0086D6 #6F5034 150
#0086D6 #FF9016 300
#0086D6 #00B1B7 150
#0086D6 #BECF00 270
#F7E6DE #000000 90
#F7E6DE #FFFFFF 90
#F7E6DE #545454 120
#F7E6DE #8E9089 120
#F7E6DE #C12E1F 90
#F7E6DE #F4EE2A 60
#F7E6DE #0086D6 90
#F7E6DE #4479fb 90
#F7E6DE #5E43B7 90
#F7E6DE #482960 120
#F7E6DE #0056B8 120
#F7E6DE #FEC600 120
#F7E6DE #EC008C 150
#F7E6DE #F5547C 120
#F7E6DE #6F5034 150
#F7E6DE #FF9016 120
#F7E6DE #00B1B7 90
#F7E6DE #BECF00 120
#4479fb #000000 150
#4479fb #FFFFFF 900
#4479fb #545454 240
#4479fb #8E9089 330
#4479fb #C12E1F 210
#4479fb #F4EE2A 270
#4479fb #F7E6DE 360
#4479fb #5E43B7 180
#4479fb #482960 180
#4479fb #0056B8 240
#4479fb #FEC600 300
#4479fb #EC008C 300
#4479fb #F5547C 390
#4479fb #6F5034 180
#4479fb #FF9016 300
#4479fb #00B1B7 360
#4479fb #BECF00 270
#5E43B7 #000000 90
#5E43B7 #FFFFFF 630
#5E43B7 #545454 150
#5E43B7 #8E9089 210
#5E43B7 #C12E1F 210
#5E43B7 #F4EE2A 330
#5E43B7 #0086D6 180
#5E43B7 #F7E6DE 510
#5E43B7 #4479fb 240
#5E43B7 #482960 150
#5E43B7 #0056B8 120
#5E43B7 #FEC600 540
#5E43B7 #EC008C 270
#5E43B7 #F5547C 420
#5E43B7 #6F5034 150
#5E43B7 #FF9016 330
#5E43B7 #00B1B7 270
#5E43B7 #BECF00 330
#482960 #000000 90
#482960 #FFFFFF 900
#482960 #545454 240
#482960 #8E9089 510
#482960 #C12E1F 360
#482960 #F4EE2A 420
#482960 #0086D6 330
#482960 #F7E6DE 510
#482960 #4479fb 390
#482960 #5E43B7 270
#482960 #0056B8 300
#482960 #FEC600 660
#482960 #EC008C 360
#482960 #F5547C 510
#482960 #6F5034 180
#482960 #FF9016 540
#482960 #00B1B7 450
#482960 #BECF00 600
#0056B8 #000000 90
#0056B8 #FFFFFF 780
#0056B8 #545454 270
#0056B8 #8E9089 270
#0056B8 #C12E1F 330
#0056B8 #F4EE2A 630
#0056B8 #0086D6 180
#0056B8 #F7E6DE 840
#0056B8 #4479fb 270
#0056B8 #5E43B7 270
#0056B8 #482960 150
#0056B8 #FEC600 630
#0056B8 #EC008C 450
#0056B8 #6F5034 240
#0056B8 #FF9016 510
#0056B8 #00B1B7 240
#0056B8 #BECF00 510
#FEC600 #000000 90
#FEC600 #FFFFFF 900
#FEC600 #545454 390
#FEC600 #8E9089 600
#FEC600 #C12E1F 180
#FEC600 #F4EE2A 150
#FEC600 #0086D6 330
#FEC600 #F7E6DE 600
#FEC600 #4479fb 180
#FEC600 #5E43B7 270
#FEC600 #482960 330
#FEC600 #0056B8 300
#FEC600 #EC008C 390
#FEC600 #F5547C 570
#FEC600 #6F5034 240
#FEC600 #FF9016 150
#FEC600 #00B1B7 510
#FEC600 #BECF00 300
#EC008C #000000 90
#EC008C #FFFFFF 900
#EC008C #545454 240
#EC008C #8E9089 270
#EC008C #C12E1F 120
#EC008C #F4EE2A 360
#EC008C #0086D6 270
#EC008C #F7E6DE 660
#EC008C #4479fb 330
#EC008C #5E43B7 270
#EC008C #482960 270
#EC008C #0056B8 210
#EC008C #FEC600 510
#EC008C #F5547C 120
#EC008C #6F5034 180
#EC008C #00B1B7 360
#EC008C #BECF00 570
#F5547C #000000 90
#F5547C #FFFFFF 900
#F5547C #545454 180
#F5547C #8E9089 180
#F5547C #C12E1F 150
#F5547C #F4EE2A 270
#F5547C #0086D6 270
#F5547C #F7E6DE 540
#F5547C #4479fb 300
#F5547C #5E43B7 210
#F5547C #482960 240
#F5547C #0056B8 210
#F5547C #FEC600 330
#F5547C #EC008C 120
#F5547C #6F5034 180
#F5547C #FF9016 150
#F5547C #00B1B7 300
#F5547C #BECF00 330
#6F5034 #000000 180
#6F5034 #FFFFFF 660
#6F5034 #545454 180
#6F5034 #8E9089 240
#6F5034 #C12E1F 240
#6F5034 #F4EE2A 390
#6F5034 #0086D6 330
#6F5034 #F7E6DE 420
#6F5034 #4479fb 300
#6F5034 #5E43B7 300
#6F5034 #482960 180
#6F5034 #0056B8 300
#6F5034 #FEC600 270
#6F5034 #EC008C 210
#6F5034 #F5547C 240
#6F5034 #FF9016 240
#6F5034 #00B1B7 270
#6F5034 #BECF00 360
#FF9016 #FFFFFF 900
#FF9016 #545454 240
#FF9016 #8E9089 270
#FF9016 #C12E1F 150
#FF9016 #F4EE2A 330
#FF9016 #0086D6 240
#FF9016 #F7E6DE 390
#FF9016 #4479fb 240
#FF9016 #5E43B7 270
#FF9016 #482960 180
#FF9016 #0056B8 240
#FF9016 #FEC600 210
#FF9016 #EC008C 210
#FF9016 #F5547C 210
#FF9016 #6F5034 180
#FF9016 #00B1B7 300
#FF9016 #BECF00 270
#00B1B7 #000000 210
#00B1B7 #FFFFFF 480
#00B1B7 #545454 300
#00B1B7 #8E9089 180
#00B1B7 #C12E1F 300
#00B1B7 #F4EE2A 300
#00B1B7 #0086D6 150
#00B1B7 #F7E6DE 390
#00B1B7 #4479fb 120
#00B1B7 #5E43B7 270
#00B1B7 #482960 270
#00B1B7 #0056B8 150
#00B1B7 #FEC600 330
#00B1B7 #EC008C 270
#00B1B7 #F5547C 270
#00B1B7 #6F5034 210
#00B1B7 #FF9016 270
#00B1B7 #BECF00 240
#BECF00 #000000 270
#BECF00 #FFFFFF 450
#BECF00 #545454 270
#BECF00 #8E9089 270
#BECF00 #C12E1F 150
#BECF00 #F4EE2A 90
#BECF00 #0086D6 300
#BECF00 #F7E6DE 300
#BECF00 #4479fb 180
#BECF00 #5E43B7 270
#BECF00 #482960 210
#BECF00 #0056B8 240
#BECF00 #FEC600 210
#BECF00 #EC008C 240
#BECF00 #F5547C 150
#BECF00 #6F5034 150
#BECF00 #FF9016 150
#BECF00 #00B1B7 270

View File

@@ -1,14 +1,14 @@
colors colors
#000000 #C12E1F #00AE42 #545454 #D1D3D5 #5B6579 #F4EE2A #9D432C #5E43B7 #0A2989 #FF6A13 #8E9089 #000000 #C12E1F #4479fb #545454 #D1D3D5 #5B6579 #F4EE2A #9D432C #5E43B7 #0A2989 #FF6A13 #8E9089
src dst flush src dst flush
#000000 #F4EE2A 450 #000000 #F4EE2A 450
#000000 #5E43B7 330 #000000 #5E43B7 330
#C12E1F #F4EE2A 420 #C12E1F #F4EE2A 420
#C12E1F #FF6A13 210 #C12E1F #FF6A13 210
#00AE42 #D1D3D5 330 #4479fb #D1D3D5 330
#00AE42 #F4EE2A 240 #4479fb #F4EE2A 240
#00AE42 #FF6A13 270 #4479fb #FF6A13 270
#545454 #00AE42 180 #545454 #4479fb 180
#545454 #D1D3D5 240 #545454 #D1D3D5 240
#545454 #F4EE2A 270 #545454 #F4EE2A 270
#545454 #5E43B7 120 #545454 #5E43B7 120
@@ -17,7 +17,7 @@ src dst flush
#D1D3D5 #F4EE2A 120 #D1D3D5 #F4EE2A 120
#D1D3D5 #FF6A13 150 #D1D3D5 #FF6A13 150
#5B6579 #C12E1F 120 #5B6579 #C12E1F 120
#5B6579 #00AE42 90 #5B6579 #4479fb 90
#5B6579 #D1D3D5 120 #5B6579 #D1D3D5 120
#5B6579 #F4EE2A 180 #5B6579 #F4EE2A 180
#5B6579 #9D432C 120 #5B6579 #9D432C 120
@@ -26,22 +26,22 @@ src dst flush
#5B6579 #8E9089 90 #5B6579 #8E9089 90
#F4EE2A #000000 120 #F4EE2A #000000 120
#F4EE2A #C12E1F 90 #F4EE2A #C12E1F 90
#F4EE2A #00AE42 150 #F4EE2A #4479fb 150
#F4EE2A #9D432C 150 #F4EE2A #9D432C 150
#F4EE2A #FF6A13 90 #F4EE2A #FF6A13 90
#9D432C #00AE42 240 #9D432C #4479fb 240
#9D432C #D1D3D5 300 #9D432C #D1D3D5 300
#9D432C #F4EE2A 270 #9D432C #F4EE2A 270
#9D432C #FF6A13 180 #9D432C #FF6A13 180
#9D432C #8E9089 210 #9D432C #8E9089 210
#5E43B7 #00AE42 180 #5E43B7 #4479fb 180
#5E43B7 #D1D3D5 270 #5E43B7 #D1D3D5 270
#5E43B7 #F4EE2A 270 #5E43B7 #F4EE2A 270
#5E43B7 #9D432C 150 #5E43B7 #9D432C 150
#5E43B7 #FF6A13 270 #5E43B7 #FF6A13 270
#5E43B7 #8E9089 210 #5E43B7 #8E9089 210
#0A2989 #C12E1F 330 #0A2989 #C12E1F 330
#0A2989 #00AE42 210 #0A2989 #4479fb 210
#0A2989 #545454 150 #0A2989 #545454 150
#0A2989 #D1D3D5 450 #0A2989 #D1D3D5 450
#0A2989 #5B6579 240 #0A2989 #5B6579 240
@@ -55,7 +55,7 @@ src dst flush
#FF6A13 #9D432C 120 #FF6A13 #9D432C 120
#FF6A13 #8E9089 180 #FF6A13 #8E9089 180
#8E9089 #C12E1F 150 #8E9089 #C12E1F 150
#8E9089 #00AE42 120 #8E9089 #4479fb 120
#8E9089 #D1D3D5 150 #8E9089 #D1D3D5 150
#8E9089 #F4EE2A 270 #8E9089 #F4EE2A 270
#8E9089 #FF6A13 150 #8E9089 #FF6A13 150

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
resources/images/L.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="7.77482" cy="7.85898" r="7.70859" fill="#262E30"/>
</svg>

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="11.8100004196167" height="12" viewBox="0 0 11.8100004196167 12"><defs><clipPath id="master_svg0_2688_67072"><rect x="0" y="0" width="11.8100004196167" height="12" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_2688_67072)"><g><path d="M7.15,9.68L7.15,7.13C7.15,6.96,7.24,6.8,7.39,6.72L9.48,5.51L10.44,4.96L10.44,3.41C10.44,3.07,10.26,2.75,9.96,2.58L5.7,0.13C5.4,-0.04,5.04,-0.04,4.74,0.13L0.48,2.59C0.18,2.76,0,3.08,0,3.42L0,8.34C0,8.68,0.18,9,0.48,9.17L4.74,11.63C5.04,11.8,5.4,11.8,5.7,11.63L7.16,10.79L7.16,9.68L7.15,9.68ZM5.69,5.05C5.39,5.22,5.21,5.54,5.21,5.88L5.21,9.97C5.21,10.34,4.81,10.57,4.49,10.38L1.18,8.47C1.03,8.38,0.94,8.23,0.94,8.06L0.94,3.69C0.94,3.52,1.03,3.36,1.18,3.28L4.96,1.1C5.11,1.01,5.29,1.01,5.44,1.1L8.27,2.73C8.59,2.91,8.59,3.37,8.27,3.56L5.68,5.06L5.69,5.05Z" fill="#212322" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M11.090000095367431,4.590000153192139L10.44000009536743,4.970000553192139L10.44000009536743,8.630001553192137C10.44000009536743,8.80000155319214,10.350000095367431,8.950001553192138,10.200000095367432,9.03000155319214L10.150000095367432,9.060001553192139L10.080000095367431,9.10000155319214L9.480000095367432,9.450001553192138L9.090000095367431,9.670001553192138L7.150000095367432,10.790001553192138L7.150000095367432,11.490001553192139L7.150000095367432,11.520001553192138C7.150000095367432,11.880001553192137,7.5300000953674315,12.10000155319214,7.850000095367432,11.94000155319214L7.870000095367431,11.94000155319214L8.250000095367431,11.71000155319214L11.560000095367432,9.790001553192138C11.71000009536743,9.700001553192138,11.800000095367432,9.55000155319214,11.800000095367432,9.380001553192137L11.800000095367432,4.999999553192139C11.800000095367432,4.630000553192139,11.400000095367432,4.400000553192139,11.080000095367431,4.590000153192139L11.090000095367431,4.590000153192139Z" fill="#212322" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,11 @@
<svg width="93" height="26" viewBox="0 0 93 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.3128 20.7596V18.6694V15.2999C15.3128 14.9344 15.5068 14.5974 15.8263 14.4147L20.2992 11.8276L22.3474 10.6454V7.32727C22.3474 6.59626 21.9594 5.91664 21.3262 5.55114L12.1978 0.274131C11.5645 -0.091377 10.7829 -0.091377 10.1496 0.274131L1.02124 5.55114C0.387957 5.91664 0 6.59626 0 7.32727V17.8813C0 18.6123 0.387957 19.2919 1.02124 19.6574L10.1496 24.9344C10.7829 25.2999 11.5645 25.2999 12.1978 24.9344L15.3128 23.1354V20.7596ZM12.1921 10.8396C11.5588 11.2051 11.1708 11.8847 11.1708 12.6157V21.3821C11.1708 22.1703 10.3151 22.6614 9.63613 22.2674L2.55594 18.1782C2.23645 17.9955 2.04247 17.6585 2.04247 17.293V7.92693C2.04247 7.56142 2.23645 7.22447 2.55594 7.04172L10.6574 2.35866C10.9769 2.17591 11.3648 2.17591 11.6786 2.35866L17.7376 5.85953C18.4222 6.25359 18.4222 7.2416 17.7376 7.63566L12.1921 10.8396Z" fill="#5475FF"/>
<path d="M23.7469 9.83924L22.3549 10.6445V13.5286V13.8084V17.3036V18.4915C22.3549 18.8513 22.1609 19.1825 21.8414 19.3538L21.733 19.4167L21.5847 19.5023L20.301 20.2448L19.4737 20.7245L15.3203 23.1231V24.1397V24.6251V24.6423V24.7051C15.3374 25.4646 16.1419 25.9501 16.8208 25.6074L16.855 25.5903L17.6766 25.1163L24.7682 20.9986C25.082 20.8159 25.2759 20.4789 25.2759 20.1134V10.7302C25.2817 9.94203 24.4259 9.44517 23.7469 9.83924Z" fill="#5475FF"/>
<path d="M66.4018 11.0684H64.1543C63.8168 11.0684 63.5469 11.3386 63.5469 11.6764V20.1822C63.5469 20.52 63.8168 20.7902 64.1543 20.7902H66.4018C66.7392 20.7902 67.0092 20.52 67.0092 20.1822V11.6764C67.0024 11.3386 66.7325 11.0684 66.4018 11.0684Z" fill="#777777"/>
<path d="M66.4018 8.96777H64.1543C63.8168 8.96777 63.5469 8.69753 63.5469 8.35973V6.10999C63.5469 5.77219 63.8168 5.50195 64.1543 5.50195H66.4018C66.7392 5.50195 67.0092 5.77219 67.0092 6.10999V8.35973C67.0024 8.69753 66.7325 8.96777 66.4018 8.96777Z" fill="#777777"/>
<path d="M92.0424 11.0684H89.7949C89.4575 11.0684 89.1875 11.3386 89.1875 11.6764V20.1822C89.1875 20.52 89.4575 20.7902 89.7949 20.7902H92.0424C92.3798 20.7902 92.6498 20.52 92.6498 20.1822V11.6764C92.6498 11.3386 92.3798 11.0684 92.0424 11.0684Z" fill="#777777"/>
<path d="M92.0424 8.96777H89.7949C89.4575 8.96777 89.1875 8.69753 89.1875 8.35973V6.10999C89.1875 5.77219 89.4575 5.50195 89.7949 5.50195H92.0424C92.3798 5.50195 92.6498 5.77219 92.6498 6.10999V8.35973C92.6498 8.69753 92.3798 8.96777 92.0424 8.96777Z" fill="#777777"/>
<path d="M80.0021 5.50781H79.0774H77.6736H74.974H73.7591H71.0595C70.722 5.50781 70.4521 5.77805 70.4521 6.11585V8.35884C70.4521 8.69664 70.722 8.96688 71.0595 8.96688H73.7591V8.98039H77.6669H78.0853H79.0639H79.8333C81.1697 8.98039 82.2563 10.0681 82.2563 11.4058V13.1488V13.1623V14.9054C82.2563 16.2431 81.1697 17.3308 79.8333 17.3308H78.0853H76.4858H76.3305H74.515C74.1776 17.3308 73.9076 17.0606 73.9076 16.7228V14.9054V14.3784V14.223V13.7636C73.9076 13.4258 73.6376 13.1556 73.3002 13.1556H71.0527C70.7153 13.1556 70.4453 13.4258 70.4453 13.7636V14.223V20.1751C70.4453 20.5129 70.7153 20.7831 71.0527 20.7831H71.3092H73.9076H75.7434C75.8851 20.7966 76.0268 20.7966 76.1753 20.7966H79.9886C83.1471 20.7966 85.7118 18.2293 85.7118 15.0675V13.1691V13.1556V11.2572C85.7253 8.07509 83.1607 5.50781 80.0021 5.50781Z" fill="#777777"/>
<path d="M54.3479 5.50781H50.5279C47.3694 5.50781 44.8047 8.07509 44.8047 11.2369V11.9463V13.1488V14.8986V15.054C44.8047 18.2158 47.3694 20.7831 50.5279 20.7831H51.8305C52.168 20.7831 52.4379 20.5129 52.4379 20.1751V17.9253C52.4379 17.5875 52.168 17.3173 51.8305 17.3173H50.6832C49.3468 17.3173 48.2602 16.2296 48.2602 14.8919V13.1421V11.9395V11.3855C48.2602 10.0478 49.3468 8.96012 50.6832 8.96012H54.186C55.5223 8.96012 56.6089 10.0478 56.6089 11.3855V12.534C56.6089 12.8718 56.8789 13.1421 57.2163 13.1421H59.4638C59.8012 13.1421 60.0712 12.8718 60.0712 12.534V11.2774C60.0712 11.2639 60.0712 11.2504 60.0712 11.2301C60.0779 8.06833 57.5133 5.50781 54.3479 5.50781Z" fill="#777777"/>
<path d="M59.8929 18.1633L55.0606 13.326C54.9458 13.2112 54.7906 13.1504 54.6354 13.1504H51.4498C50.9099 13.1504 50.6399 13.8057 51.0246 14.1841L57.4497 20.6158C57.686 20.8522 58.0707 20.8522 58.3069 20.6158L59.8997 19.0213C60.1291 18.7781 60.1291 18.3998 59.8929 18.1633Z" fill="#777777"/>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

3
resources/images/R.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="7.77482" cy="8.025" r="7.70859" fill="#262E30"/>
</svg>

After

Width:  |  Height:  |  Size: 164 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M.5,13.5V3.5a1,1,0,0,1,1-1h10a1,1,0,0,1,1,1v10a1,1,0,0,1-1,1H1.5A1,1,0,0,1,.5,13.5Zm13-1a1,1,0,0,0,1-1V1.5a1,1,0,0,0-1-1H3.5a1,1,0,0,0-1,1m0,7h3m2,0h3m-4,4v-8" style="fill:none;stroke:#949494;stroke-linecap:square;stroke-linejoin:round;opacity:1"/></svg>

After

Width:  |  Height:  |  Size: 346 B

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <path d="M17.6283 12.2218H4.35589C3.97272 12.2218 3.66406 11.6765 3.66406 10.9996C3.66406 10.3226 3.97272 9.77734 4.35589 9.77734H17.6389C18.0221 9.77734 18.3307 10.3226 18.3307 10.9996C18.3307 11.6765 18.0114 12.2218 17.6283 12.2218Z" fill="white"/>
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <path d="M11.0035 18.3327C10.3265 18.3327 9.78125 18.0238 9.78125 17.6404V4.35834C9.78125 3.9749 10.3265 3.66602 11.0035 3.66602C11.6804 3.66602 12.2257 3.9749 12.2257 4.35834V17.651C12.2257 18.0238 11.6804 18.3327 11.0035 18.3327Z" fill="white"/>
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#00ff00" d="M11,11V5h2v6h6v2h-6v6h-2v-6H5v-2H11z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 437 B

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <path d="M17.6283 12.2218H4.35589C3.97272 12.2218 3.66406 11.6765 3.66406 10.9996C3.66406 10.3226 3.97272 9.77734 4.35589 9.77734H17.6389C18.0221 9.77734 18.3307 10.3226 18.3307 10.9996C18.3307 11.6765 18.0114 12.2218 17.6283 12.2218Z" fill="white"/>
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <path d="M11.0035 18.3327C10.3265 18.3327 9.78125 18.0238 9.78125 17.6404V4.35834C9.78125 3.9749 10.3265 3.66602 11.0035 3.66602C11.6804 3.66602 12.2257 3.9749 12.2257 4.35834V17.651C12.2257 18.0238 11.6804 18.3327 11.0035 18.3327Z" fill="white"/>
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
<path fill="#ADADAF" d="M11,11V5h2v6h6v2h-6v6h-2v-6H5v-2H11z"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 437 B

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -0,0 +1,3 @@
<svg width="18" height="19" viewBox="0 0 18 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.4742 9.15669C12.7353 9.41782 12.7353 9.84008 12.4742 10.0984L7.14038 15.435C6.87924 15.6961 6.45698 15.6961 6.19863 15.435C5.94027 15.1739 5.93749 14.7516 6.19863 14.4933L11.0602 9.63173L6.19585 4.76742C5.93472 4.50628 5.93472 4.08403 6.19585 3.82567C6.45698 3.56731 6.87924 3.56454 7.1376 3.82567L12.4742 9.15669Z" fill="#262E30"/>
</svg>

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -0,0 +1,3 @@
<svg width="18" height="19" viewBox="0 0 18 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.4742 9.15669C12.7353 9.41782 12.7353 9.84008 12.4742 10.0984L7.14038 15.435C6.87924 15.6961 6.45698 15.6961 6.19863 15.435C5.94027 15.1739 5.93749 14.7516 6.19863 14.4933L11.0602 9.63173L6.19585 4.76742C5.93472 4.50628 5.93472 4.08403 6.19585 3.82567C6.45698 3.56731 6.87924 3.56454 7.1376 3.82567L12.4742 9.15669Z" fill="#CECECE"/>
</svg>

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -0,0 +1,3 @@
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.0084 12.6962C9.74722 12.9574 9.32496 12.9574 9.0666 12.6962L3.73003 7.36244C3.4689 7.10131 3.4689 6.67905 3.73003 6.4207C3.99116 6.16234 4.41342 6.15956 4.67178 6.4207L9.53331 11.2822L14.3976 6.41792C14.6588 6.15678 15.081 6.15678 15.3394 6.41792C15.5977 6.67905 15.6005 7.10131 15.3394 7.35967L10.0084 12.6962Z" fill="#262E30"/>
</svg>

After

Width:  |  Height:  |  Size: 446 B

Some files were not shown because too many files have changed in this diff Show More