49 Commits

Author SHA1 Message Date
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
wjyLearn
4baf9e41c5 fix PLA Matte temperature 2024-12-03 11:05:10 +08:00
QIDI TECH
dd004ebffd fix some bug 2024-11-30 14:00:32 +08:00
QIDI TECH
1244542711 version update 2024-11-28 15:28:37 +08:00
QIDI TECH
ccb7e095e1 add new filament 2024-11-28 15:26:22 +08:00
QIDI TECH
79518648c0 update src 2024-11-28 15:23:54 +08:00
QIDI TECH
7eb6543991 update slic3r 2024-11-28 15:19:12 +08:00
QIDI TECH
a26696f35e update libslic3r 2024-11-28 15:12:18 +08:00
QIDI TECH
459e7822db update resources 2024-11-28 15:01:13 +08:00
QIDI TECH
22572c2286 Update translation 2024-11-28 14:54:15 +08:00
QIDI TECH
db50a0814e Update dependency 2024-11-28 14:53:09 +08:00
sunsets
506ff7ad8c stl 2024-11-18 13:36:51 +08:00
QIDI TECH
1fe739e6fc version update 2024-10-25 14:53:19 +08:00
QIDI TECH
4514d58c47 Many issues have been optimized and fixed 2024-10-25 14:49:26 +08:00
QIDI TECH
b907b14a6c Add PLA+ 2024-10-25 14:45:56 +08:00
QIDI TECH
726068cf1e Update translation 2024-10-25 14:43:53 +08:00
QIDI TECH
a7223f812f version update 2024-09-29 08:43:33 +08:00
QIDI TECH
72571efb04 Optimized and fixed some bugs 2024-09-28 16:31:40 +08:00
QIDI TECH
cc186748ed Optimization parameter 2024-09-28 16:29:36 +08:00
QIDI TECH
680346707d Add Filament Web 2024-09-28 16:26:58 +08:00
QIDI TECH
e84f284825 Update translation 2024-09-28 16:24:06 +08:00
QIDI TECH
acc64cecdc Update readme 2024-09-25 13:32:01 +08:00
QIDI TECH
47091be6d1 Add X-Plus 4 and update to 1.9.5.51 2024-09-20 20:22:49 +08:00
QIDI TECH
6b6ca4055c Update logo 2024-09-20 17:57:41 +08:00
QIDI TECH
9195b9818d Several new materials were added and the parameters were optimized 2024-09-20 09:44:58 +08:00
QIDI TECH
73e8cede50 Add QIDI model and opptimize user avatars 2024-09-20 09:38:18 +08:00
QIDI TECH
71eb63a2eb Update translation 2024-09-20 09:17:28 +08:00
QIDI TECH
d842832b25 Updated to 1.9.5, and optimize calibration and device 2024-09-16 16:07:29 +08:00
QIDI TECH
fa251e0a9a Update translation 2024-09-16 15:50:54 +08:00
QIDI TECH
b787d6f029 version update 2024-09-03 16:19:35 +08:00
QIDI TECH
4626916f7c fix some bug 2024-09-03 16:11:08 +08:00
1273 changed files with 110119 additions and 37290 deletions

1
.gitignore vendored
View File

@@ -27,3 +27,4 @@ SVG
**/process_full/ **/process_full/
**/machine_full/ **/machine_full/
**/filament_full/ **/filament_full/
.idea/

View File

@@ -1,11 +1,8 @@
#!/bin/bash #!/bin/bash
set -e # exit on first error
export ROOT=`pwd` export ROOT=$(dirname $(readlink -f ${0}))
export NCORES=`nproc --all`
export CMAKE_BUILD_PARALLEL_LEVEL=${NCORES} set -e # exit on first error
FOUND_GTK2=$(dpkg -l libgtk* | grep gtk2)
FOUND_GTK3=$(dpkg -l libgtk* | grep gtk-3)
function check_available_memory_and_disk() { function check_available_memory_and_disk() {
FREE_MEM_GB=$(free -g -t | grep 'Mem' | rev | cut -d" " -f1 | rev) FREE_MEM_GB=$(free -g -t | grep 'Mem' | rev | cut -d" " -f1 | rev)
@@ -27,243 +24,185 @@ function check_available_memory_and_disk() {
fi fi
} }
function usage() {
echo "Usage: ./BuildLinux.sh [-1][-b][-c][-d][-i][-r][-s][-u]"
echo " -1: limit builds to 1 core (where possible)"
echo " -f: disable safe parallel number limit(By default, the maximum number of parallels is set to free memory/2.5)"
echo " -b: build in debug mode"
echo " -c: force a clean build"
echo " -d: build deps (optional)"
echo " -h: this help output"
echo " -i: Generate appimage (optional)"
echo " -r: skip ram and disk checks (low ram compiling)"
echo " -s: build qidi-studio (optional)"
echo " -u: update and build dependencies (optional and need sudo)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
}
unset name unset name
while getopts ":dsiuhgbr" opt; do while getopts ":1fbcdghirsu" opt; do
case ${opt} in case ${opt} in
u ) 1 )
UPDATE_LIB="1" export CMAKE_BUILD_PARALLEL_LEVEL=1
;; ;;
i ) f )
BUILD_IMAGE="1" DISABLE_PARALLEL_LIMIT=1
;;
d )
BUILD_DEPS="1"
;;
s )
BUILD_QIDI_STUDIO="1"
;; ;;
b ) b )
BUILD_DEBUG="1" BUILD_DEBUG="1"
;; ;;
g ) c )
FOUND_GTK3="" CLEAN_BUILD=1
;;
d )
BUILD_DEPS="1"
;;
h ) usage
exit 0
;;
i )
BUILD_IMAGE="1"
;; ;;
r ) r )
SKIP_RAM_CHECK="1" SKIP_RAM_CHECK="1"
;; ;;
h ) echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" s )
echo " -i: Generate appimage (optional)" BUILD_QIDI_STUDIO="1"
echo " -g: force gtk2 build" ;;
echo " -b: build in debug mode" u )
echo " -d: build deps (optional)" UPDATE_LIB="1"
echo " -s: build qidi-studio (optional)"
echo " -u: only update clock & dependency packets (optional and need sudo)"
echo " -r: skip free ram check (low ram compiling)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
exit 0
;; ;;
esac esac
done done
if [ $OPTIND -eq 1 ] if [ ${OPTIND} -eq 1 ]
then then
echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" usage
echo " -i: Generate appimage (optional)"
echo " -g: force gtk2 build"
echo " -b: build in debug mode"
echo " -d: build deps (optional)"
echo " -s: build qidi-studio (optional)"
echo " -u: only update clock & dependency packets (optional and need sudo)"
echo " -r: skip free ram check (low ram compiling)"
echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'"
echo " and then './BuildLinux.sh -dsi'"
exit 0 exit 0
fi fi
# mkdir build DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release)
if [ ! -d "build" ] VERSION=$(awk -F= '/^VERSION_ID=/ {print $2}' /etc/os-release)
# OSLIKE is a space-delineated list of similar distributions
OSLIKE=$(awk -F= '/^ID_LIKE=/ {print $2}' /etc/os-release | tr -d '"')
# Iterate over a list of candidate distribution targets, first match is used
for CANDIDATE in ${DISTRIBUTION} ${OSLIKE}; do
if [ -f ./linux.d/${CANDIDATE} ]
then
TARGET_DISTRO="${CANDIDATE}"
break
fi
done
if [ -z ${TARGET_DISTRO} ]
then then
mkdir build echo "Your distribution does not appear to be currently supported by these build scripts"
exit 1
fi fi
#FIXME: require root for -u option echo "OS distribution is '${DISTRIBUTION}'. Using package dependencies for '${TARGET_DISTRO}'."
if [[ -n "$UPDATE_LIB" ]] source ./linux.d/${TARGET_DISTRO}
then
echo -n -e "Updating linux ...\n"
# hwclock -s # DeftDawg: Why does SuperSlicer want to do this?
apt update
if [[ -z "$FOUND_GTK3" ]]
then
echo -e "\nInstalling: libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n"
apt install -y libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git
else
echo -e "\nFind libgtk-3, installing: libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n"
apt install -y libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git
fi
# for ubuntu 22.04:
ubu_version="$(cat /etc/issue)"
if [[ $ubu_version == "Ubuntu 22.04"* ]]
then
apt install -y curl libssl-dev libcurl4-openssl-dev m4
elif [[ $ubu_version == "Ubuntu 24.04"* ]]
then
NEW_SOURCE="deb http://gb.archive.ubuntu.com/ubuntu jammy main"
if grep -qF -- "$NEW_SOURCE" /etc/apt/sources.list; then
echo "source exist: $NEW_SOURCE"
else
echo "$NEW_SOURCE" | sudo tee -a /etc/apt/sources.list > /dev/null
fi
apt update
fi
if [[ -n "$BUILD_DEBUG" ]]
then
echo -e "\nInstalling: libssl-dev libcurl4-openssl-dev\n"
apt install -y libssl-dev libcurl4-openssl-dev
fi
# Addtional Dev packages for QIDI Studio echo "FOUND_GTK3=${FOUND_GTK3}"
export REQUIRED_DEV_PACKAGES="libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules" if [[ -z "${FOUND_GTK3_DEV}" ]]
# libwebkit2gtk-4.1-dev ??
export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w)
if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then
sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file
fi
echo -e "done\n"
exit 0
fi
FOUND_GTK2_DEV=$(dpkg -l libgtk* | grep gtk2.0-dev || echo '')
FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '')
echo "FOUND_GTK2=$FOUND_GTK2)"
if [[ -z "$FOUND_GTK2_DEV" ]]
then
if [[ -z "$FOUND_GTK3_DEV" ]]
then then
echo "Error, you must install the dependencies before." echo "Error, you must install the dependencies before."
echo "Use option -u with sudo" echo "Use option -u with sudo"
exit 0 exit 1
fi
fi fi
echo "[1/9] Updating submodules..." echo "Changing date in version..."
{
# update submodule profiles
pushd resources/profiles
git submodule update --init
popd
}
echo "[2/9] Changing date in version..."
{ {
# change date in version # change date in version
sed -i "s/+UNKNOWN/_$(date '+%F')/" version.inc sed -i "s/+UNKNOWN/_$(date '+%F')/" version.inc
} }
echo "done" echo "done"
# mkdir in deps if ! [[ -n "${SKIP_RAM_CHECK}" ]]
if [ ! -d "deps/build" ]
then then
mkdir deps/build check_available_memory_and_disk
fi fi
if ! [[ -n "$SKIP_RAM_CHECK" ]] if ! [[ -n "${DISABLE_PARALLEL_LIMIT}" ]]
then then
check_available_memory_and_disk FREE_MEM_GB=$(free -g -t | grep 'Mem' | rev | cut -d" " -f1 | rev)
fi MAX_THREADS=$((FREE_MEM_GB * 10 / 25))
if [ "$MAX_THREADS" -lt 1 ]; then
if [[ -n "$BUILD_DEPS" ]] export CMAKE_BUILD_PARALLEL_LEVEL=1
then else
echo "[3/9] Configuring dependencies..." export CMAKE_BUILD_PARALLEL_LEVEL=${MAX_THREADS}
BUILD_ARGS=""
if [[ -n "$FOUND_GTK3_DEV" ]]
then
BUILD_ARGS="-DDEP_WX_GTK3=ON"
fi fi
if [[ -n "$BUILD_DEBUG" ]] echo "System free memory: ${FREE_MEM_GB} GB"
echo "Setting CMAKE_BUILD_PARALLEL_LEVEL: ${CMAKE_BUILD_PARALLEL_LEVEL}"
fi
if [[ -n "${BUILD_DEPS}" ]]
then
echo "Configuring dependencies..."
BUILD_ARGS="-DDEP_WX_GTK3=ON"
if [[ -n "${CLEAN_BUILD}" ]]
then then
# have to build deps with debug & release or the cmake won't find evrything it needs rm -fr deps/build
fi
if [ ! -d "deps/build" ]
then
mkdir deps/build
fi
if [[ -n "${BUILD_DEBUG}" ]]
then
# have to build deps with debug & release or the cmake won't find everything it needs
mkdir deps/build/release mkdir deps/build/release
pushd deps/build/release cmake -S deps -B deps/build/release -G Ninja -DDESTDIR="../destdir" ${BUILD_ARGS}
cmake ../.. -DDESTDIR="../destdir" $BUILD_ARGS cmake --build deps/build/release
make -j$NCORES
popd
BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug"
fi fi
# cmake deps
pushd deps/build
cmake .. $BUILD_ARGS
echo "done"
# make deps
echo "[4/9] Building dependencies..."
make -j$NCORES
echo "done"
# rename wxscintilla # TODO: DeftDawg: Does QIDIStudio need this? echo "cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS}"
# echo "[5/9] Renaming wxscintilla library..." cmake -S deps -B deps/build -G Ninja ${BUILD_ARGS}
# pushd destdir/usr/local/lib cmake --build deps/build
# if [[ -z "$FOUND_GTK3_DEV" ]]
# then
# cp libwxscintilla-3.1.a libwx_gtk2u_scintilla-3.1.a
# else
# cp libwxscintilla-3.1.a libwx_gtk3u_scintilla-3.1.a
# fi
# popd
# echo "done"
# FIXME: only clean deps if compiling succeeds; otherwise reruns waste tonnes of time!
# clean deps
# echo "[6/9] Cleaning dependencies..."
# rm -rf dep_*
popd
echo "done"
fi fi
if [[ -n "$BUILD_QIDI_STUDIO" ]] if [[ -n "${BUILD_QIDI_STUDIO}" ]]
then then
echo "[7/9] Configuring Slic3r..." echo "Configuring QIDIStudio..."
if [[ -n "${CLEAN_BUILD}" ]]
then
rm -fr build
fi
BUILD_ARGS="" BUILD_ARGS=""
if [[ -n "$FOUND_GTK3_DEV" ]] if [[ -n "${FOUND_GTK3_DEV}" ]]
then then
BUILD_ARGS="-DSLIC3R_GTK=3" BUILD_ARGS="-DSLIC3R_GTK=3"
fi fi
if [[ -n "$BUILD_DEBUG" ]] if [[ -n "${BUILD_DEBUG}" ]]
then then
BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug -DQDT_INTERNAL_TESTING=1" BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug -DQDT_INTERNAL_TESTING=1"
else else
BUILD_ARGS="${BUILD_ARGS} -DQDT_RELEASE_TO_PUBLIC=1 -DQDT_INTERNAL_TESTING=0" BUILD_ARGS="${BUILD_ARGS} -DQDT_RELEASE_TO_PUBLIC=1 -DQDT_INTERNAL_TESTING=0"
fi fi
echo -e "cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS}"
# cmake cmake -S . -B build -G Ninja \
pushd build -DCMAKE_PREFIX_PATH="${PWD}/deps/build/destdir/usr/local" \
cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS} -DSLIC3R_STATIC=1 \
echo "done" ${BUILD_ARGS}
echo "done"
# make Slic3r echo "Building QIDIStudio ..."
echo "[8/9] Building Slic3r..." cmake --build build --target QIDIStudio
make -j$NCORES QIDIStudio # Slic3r
# make .mo
# make gettext_po_to_mo # FIXME: DeftDawg: complains about msgfmt not existing even in SuperSlicer, did this ever work?
popd
echo "done" echo "done"
fi fi
if [[ -e $ROOT/build/src/BuildLinuxImage.sh ]]; then if [[ -e ${ROOT}/build/src/BuildLinuxImage.sh ]]; then
# Give proper permissions to script # Give proper permissions to script
chmod 755 $ROOT/build/src/BuildLinuxImage.sh chmod 755 ${ROOT}/build/src/BuildLinuxImage.sh
echo "[9/9] Generating Linux app..." echo "[9/9] Generating Linux app..."
pushd build pushd build
if [[ -n "$BUILD_IMAGE" ]] if [[ -n "${BUILD_IMAGE}" ]]
then then
$ROOT/build/src/BuildLinuxImage.sh -i ${ROOT}/build/src/BuildLinuxImage.sh -i
else
$ROOT/build/src/BuildLinuxImage.sh
fi fi
popd popd
echo "done" echo "done"
fi fi

View File

@@ -42,6 +42,7 @@ set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux")
set(IS_CROSS_COMPILE FALSE) set(IS_CROSS_COMPILE FALSE)
set(FLATPAK FALSE CACHE BOOL "Not copy FFMPEG file")
if (APPLE) if (APPLE)
set(CMAKE_FIND_FRAMEWORK LAST) set(CMAKE_FIND_FRAMEWORK LAST)
@@ -54,6 +55,8 @@ if (APPLE)
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) set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE)
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_INSTALL_RPATH "$ORIGIN")
endif () endif ()
# Proposal for C++ unit tests and sandboxes # Proposal for C++ unit tests and sandboxes
@@ -167,6 +170,7 @@ 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)
find_package(PkgConfig REQUIRED)
if(NOT DEFINED WIN10SDK_PATH) if(NOT DEFINED WIN10SDK_PATH)
if(DEFINED ENV{WIN10SDK_PATH}) if(DEFINED ENV{WIN10SDK_PATH})
set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}") set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}")
@@ -619,6 +623,10 @@ function(qidistudio_copy_dlls target config postfix output_dlls)
${CMAKE_PREFIX_PATH}/bin/occt/TKXDESTEP.dll ${CMAKE_PREFIX_PATH}/bin/occt/TKXDESTEP.dll
${CMAKE_PREFIX_PATH}/bin/occt/TKXSBase.dll ${CMAKE_PREFIX_PATH}/bin/occt/TKXSBase.dll
${CMAKE_PREFIX_PATH}/bin/freetype.dll ${CMAKE_PREFIX_PATH}/bin/freetype.dll
${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll
${CMAKE_PREFIX_PATH}/bin/swresample-5.dll
${CMAKE_PREFIX_PATH}/bin/swscale-8.dll
${CMAKE_PREFIX_PATH}/bin/avutil-59.dll
DESTINATION ${_out_dir}) DESTINATION ${_out_dir})
set(${output_dlls} set(${output_dlls}
@@ -654,11 +662,50 @@ function(qidistudio_copy_dlls target config postfix output_dlls)
${_out_dir}/TKXSBase.dll ${_out_dir}/TKXSBase.dll
${_out_dir}/freetype.dll ${_out_dir}/freetype.dll
${_out_dir}/avcodec-61.dll
${_out_dir}/swresample-5.dll
${_out_dir}/swscale-8.dll
${_out_dir}/avutil-59.dll
PARENT_SCOPE PARENT_SCOPE
) )
endfunction() endfunction()
function(qidistudio_copy_sos target config postfix output_sos)
set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}")
message ("set out_dir to CMAKE_CURRENT_BINARY_DIR: ${_out_dir}")
file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61
${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100
${CMAKE_PREFIX_PATH}/lib/libavutil.so
${CMAKE_PREFIX_PATH}/lib/libavutil.so.59
${CMAKE_PREFIX_PATH}/lib/libavutil.so.59.8.100
${CMAKE_PREFIX_PATH}/lib/libswscale.so
${CMAKE_PREFIX_PATH}/lib/libswscale.so.8
${CMAKE_PREFIX_PATH}/lib/libswscale.so.8.1.100
${CMAKE_PREFIX_PATH}/lib/libswresample.so
${CMAKE_PREFIX_PATH}/lib/libswresample.so.5
${CMAKE_PREFIX_PATH}/lib/libswresample.so.5.1.100
DESTINATION ${_out_dir})
set(${output_dlls}
${_out_dir}/libavcodec.so
${_out_dir}/libavcodec.so.61
${_out_dir}/libavcodec.so.61.3.100
${_out_dir}/libavutil.so
${_out_dir}/libavutil.so.59
${_out_dir}/libavutil.so.59.8.100
${_out_dir}/libswscale.so
${_out_dir}/libswscale.so.8
${_out_dir}/libswscale.so.8.1.100
${_out_dir}/libswresample.so
${_out_dir}/libswresample.so.5
${_out_dir}/libswresample.so.5.1.100
PARENT_SCOPE
)
endfunction()
# libslic3r, QIDIStudio GUI and the QIDIStudio executable. # libslic3r, QIDIStudio GUI and the QIDIStudio executable.
add_subdirectory(src) add_subdirectory(src)
@@ -714,4 +761,18 @@ else ()
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources") install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
endif () endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT FLATPAK)
set(LIBRARY_FILES
${LIBDIR_BIN}/libavcodec.so.61
${LIBDIR_BIN}/libavcodec.so.61.3.100
${LIBDIR_BIN}/libavutil.so.59
${LIBDIR_BIN}/libavutil.so.59.8.100
${LIBDIR_BIN}/libswresample.so.5
${LIBDIR_BIN}/libswresample.so.5.1.100
${LIBDIR_BIN}/libswscale.so.8
${LIBDIR_BIN}/libswscale.so.8.1.100
)
install(FILES ${LIBRARY_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
endif ()
configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp) configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp)

View File

@@ -9,7 +9,7 @@ set -x
# the simplicity of a single Docker image and a one-time compilation # the simplicity of a single Docker image and a one-time compilation
# seems better. # seems better.
docker build -t qidistudio \ docker build -t qidistudio \
--build-arg USER=$USER \ --build-arg USER=${USER:-root} \
--build-arg UID=$(id -u) \ --build-arg UID=$(id -u) \
--build-arg GID=$(id -g) \ --build-arg GID=$(id -g) \
$PROJECT_ROOT $PROJECT_ROOT

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,21 +5,31 @@ 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` \
--privileged=true \ --privileged=true \
`# Attach tty for running qidi with command line things` \ `# Attach tty for running qidi with command line things` \
-ti \ -ti \
`# Remove container when it is finished` \
--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,52 @@ 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
# Use bash as the shell
# 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,7 +111,7 @@ 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, # It's easier to run QIDI Studio as the same username,
@@ -82,13 +120,14 @@ RUN ./BuildLinux.sh -i
# to keep permissions the same. Just in case, defaults # to keep permissions the same. Just in case, defaults
# are root. # 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"]

104
README.md
View File

@@ -4,20 +4,116 @@
# QIDIStudio # QIDIStudio
QIDIStudio is a professional 3D printer slicing softwarewhich is perfectly compatible with all printers and 3D printing filaments of QIDI Technology. Multi-platform support, simple inerface, easy to use, complate functions, easy to learn 3D printing. QIDIStudio is a professional 3D printer slicing softwarewhich is perfectly compatible with all printers and 3D printing filaments of QIDI Technology. Multi-platform support, simple inerface, easy to use, complate functions, easy to learn 3D printing.
**Notice:QIDIStudio as a new software dedicated to QIDI's new high speed printers.**
QIDIStudio is based on [BambuStudio](https://github.com/bambulab/BambuStudio) by Bambu Lab, Bambu Studio is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community. QIDIStudio is based on [BambuStudio](https://github.com/bambulab/BambuStudio) by Bambu Lab, Bambu Studio is based on [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer) by Prusa Research, which is from [Slic3r](https://github.com/Slic3r/Slic3r) by Alessandro Ranellucci and the RepRap community.
Thanks to Bambulab, PrusaSlicer and OrcaSlicer for their contributions to the 3D printing community. Thanks to Bambulab, PrusaSlicer and OrcaSlicer for their contributions to the 3D printing community.
See the [QIDI's homepage](https://qidi3d.com) for more information. See the [QIDI's homepage](https://qidi3d.com) for more information.
### Report Issues and Make Suggestions <details open>
<summary>Content Navigation</summary>
<ol>
<li>
<a href="#function-introduction">Function Introduction</a>
</li>
<li>
<a href="#wiki">Wiki</a>
</li>
<li>
<a href="#Supporting-QIDI-Link-App">Supporting QIDI Link App</a>
</li>
<li>
<a href="#report-issues-and-make-suggestions">Report Issues and Make Suggestions</a>
<ul>
<li><a href="#some-formatting-requirements">Some Formatting Requirements</a></li>
</ul>
</li>
<li>
<a href="#license">License</a>
</li>
</ol>
</details>
----
## Function Introduction
<p align="center">
<img src="/readmeRes/UI.png" alt="UI">
</p>
### Key features are:
* **Slicer:** Fast and stable 3D model slicer
* **Printer:** Perfect compatibility with all high-speed 3D printers of QIDI TECH
* **Filament:** Perfect compatibility with all filaments of QIDI TECH and some general filaments
* **LAN:** The printer can be directly connected through IP, convenient, safe and stable
* **Internet:** Remote connection, start printing anytime, anywhere
### Other major features are:
* **Model:** A variety of model operations, move, scale, rotate, crop, color, repair, combine, split, and more
* **Parameter:** Rich parameter Settings, fine adjustment for a variety of complex models and application scenarios
* **Calibration:** Multiple calibration functions to adjust the best parameters according to the actual situation
----
## wiki
The wiki below aims to provide a detailed explanation of the QIDIStudio settings, how to get the most out of them as well as how to calibrate and setup your printer.
The wiki is work in progress so bear with us while we get it up and running!
**[Access the wiki here](https://wiki.qidi3d.com/en/software/qidi-studio)**
----
## Supporting QIDI Link App
**[Access QIDI Link App Guide Here](https://wiki.qidi3d.com/en/app)**
The supporting QIDI Link App supports IOS and Android platforms. In the app, you can scan the code to connect to the printer, remotely monitor the printer's printing progress, control the printer's printing parameters, and perform operations such as feeding and returning materials.
<p align="center">
<img src="/readmeRes/qidilink.png" alt="Add filament option ——Seal">
</p>
----
## Report Issues and Make Suggestions
Please send your question in the form of video or pictures to us through the [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support), we will reply to your information within 12 hours. Please send your question in the form of video or pictures to us through the [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support), we will reply to your information within 12 hours.
Please try to contact us through [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support) and report problems or suggestions. On github, we cannot obtain your order information, operation records and other private intelligence, nor can we generate after-sales orders, send repair files, etc. Thank you for your understanding and cooperation. Please try to contact us through [After-Sales Service](https://qidi3d.com/pages/warranty-policy-after-sales-support) and report problems or suggestions. On github, we cannot obtain your order information, operation records and other private intelligence, nor can we generate after-sales orders, send repair files, etc. Thank you for your understanding and cooperation.
### License ### Some formatting requirements
#### Issue Title:
Briefly describe the issue (e.g., `could not open file`)
#### Description:
Provide a detailed description of the issue.This will help our engineers quickly locate the problem and assist you in
resolving it
- **Issue Description**:
- A clear explanation of the problem.
- Compare the expected behavior with the actual behavior.
- **Steps to Reproduce**:
1. Step one
2. Step two
3. Step three
- Specific steps to reproduce the issue. Include a precise sequence of actions if possible.
- **Additional Information**:
- **Screenshots/Images**: Attach relevant screenshots or images that help in understanding the issue. Please add or
link to images here.
- **Environment Information**:
- Operating System Version
- Browser/Application Version
- Other relevant environment details
----
## License
QIDIStudio is licensed under the _GNU Affero General Public License, version 3_. QIDIStudio is based on BambuStudio by Bambu Lab. QIDIStudio is licensed under the _GNU Affero General Public License, version 3_. QIDIStudio is based on BambuStudio by Bambu Lab.

View File

@@ -11,7 +11,7 @@
<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.qidilab.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>
@@ -129,5 +129,10 @@
<true/> <true/>
<key>NSHumanReadableCopyright</key> <key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string> <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict> </dict>
</plist> </plist>

View File

@@ -1,5 +1,5 @@
From 1d6cd7c2f8640db3cda194c1b9b82f1e4b321395 Mon Sep 17 00:00:00 2001 From 1d6cd7c2f8640db3cda194c1b9b82f1e4b321395 Mon Sep 17 00:00:00 2001
From: "chunmao.guo" <chunmao.guo@qidilab.com> From: "chunmao.guo" <chunmao.guo@qiditech.com>
Date: Thu, 5 Jan 2023 15:55:57 +0800 Date: Thu, 5 Jan 2023 15:55:57 +0800
Subject: [PATCH] FIX: limit_handles Subject: [PATCH] FIX: limit_handles

View File

@@ -129,7 +129,7 @@ list(APPEND _patch_command COMMAND git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST
ExternalProject_Add( ExternalProject_Add(
dep_Boost dep_Boost
#URL "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip" #URL "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip"
URL "https://github.com/qidilab/boost/releases/download/1.78.0/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 URL_HASH SHA256=f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost
CONFIGURE_COMMAND "${_bootstrap_cmd}" CONFIGURE_COMMAND "${_bootstrap_cmd}"

7
deps/CMakeLists.txt vendored
View File

@@ -39,6 +39,7 @@ option(DEP_BUILD_OPENSSL "Compile openssl" ON)
option(DEP_BUILD_GLFW "Compile GLFW" ON) 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)
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.")
@@ -229,6 +230,11 @@ if (DEP_BUILD_FREETYPE)
endif () endif ()
include(OCCT/OCCT.cmake) include(OCCT/OCCT.cmake)
include(OpenCV/OpenCV.cmake) include(OpenCV/OpenCV.cmake)
set(FFMPEG_PKG "")
if (DEP_BUILD_FFMPEG)
include(FFMPEG/FFMPEG.cmake)
set(FFMPEG_PKG dep_FFMPEG)
endif ()
set(_dep_list set(_dep_list
${BOOST_PKG} ${BOOST_PKG}
@@ -247,6 +253,7 @@ set(_dep_list
${ZLIB_PKG} ${ZLIB_PKG}
${EXPAT_PKG} ${EXPAT_PKG}
${FREETYPE_PKG} ${FREETYPE_PKG}
${FFMPEG_PKG}
) )
if (MSVC) if (MSVC)

60
deps/FFMPEG/FFMPEG.cmake vendored Normal file
View File

@@ -0,0 +1,60 @@
set(_conf_cmd ./configure)
if (MSVC)
set(_dstdir ${DESTDIR}/usr/local)
set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG")
ExternalProject_Add(dep_FFMPEG
URL https://github.com/qiditech/ffmpeg_prebuilts/releases/download/7.0.2/7.0.2_msvc.zip
URL_HASH SHA256=DF44AE6B97CE84C720695AE7F151B4A9654915D1841C68F10D62A1189E0E7181
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/bin"
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/lib"
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/include"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/bin" "${_dstdir}/bin"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/lib" "${_dstdir}/lib"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/include" "${_dstdir}/include"
)
else ()
set(_extra_cmd "--pkg-config-flags=\"--static\"")
string(APPEND _extra_cmd "--extra-cflags=\"-I ${DESTDIR}/usr/local/include\"")
string(APPEND _extra_cmd "--extra-ldflags=\"-I ${DESTDIR}/usr/local/lib\"")
string(APPEND _extra_cmd "--extra-libs=\"-lpthread -lm\"")
string(APPEND _extra_cmd "--ld=\"g++\"")
string(APPEND _extra_cmd "--bindir=\"${DESTDIR}/usr/local/bin\"")
string(APPEND _extra_cmd "--enable-gpl")
string(APPEND _extra_cmd "--enable-nonfree")
ExternalProject_Add(dep_FFMPEG
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.2.tar.gz
URL_HASH SHA256=5EB46D18D664A0CCADF7B0ADEE03BD3B7FA72893D667F36C69E202A807E6D533
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
CONFIGURE_COMMAND ${_conf_cmd}
"--prefix=${DESTDIR}/usr/local"
"--enable-shared"
"--disable-doc"
"--enable-small"
"--disable-outdevs"
"--disable-filters"
"--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-protocols"
"--enable-protocol=file,fd,pipe,rtp,udp"
"--disable-muxers"
"--enable-muxer=rtp"
"--disable-encoders"
"--disable-decoders"
"--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*"
"--disable-demuxers"
"--enable-demuxer=h264,mp3,mov"
"--disable-zlib"
"--disable-avdevice"
BUILD_IN_SOURCE ON
BUILD_COMMAND make -j
INSTALL_COMMAND make install
)
endif()

2
deps/GMP/GMP.cmake vendored
View File

@@ -43,7 +43,7 @@ else ()
endif () endif ()
ExternalProject_Add(dep_GMP ExternalProject_Add(dep_GMP
URL https://github.com/qidilab/gmp/archive/refs/tags/6.2.1.tar.gz URL https://github.com/qiditech/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

@@ -8,7 +8,7 @@ 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 ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-OCCT-fix.patch
PATCH_COMMAND git apply --directory deps/build/dep_OCCT-prefix/src/dep_OCCT --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

View File

@@ -7,7 +7,7 @@ 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 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_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
CMAKE_ARGS CMAKE_ARGS
-DBUILD_SHARED_LIBS=0 -DBUILD_SHARED_LIBS=0
-DBUILD_PERE_TESTS=OFF -DBUILD_PERE_TESTS=OFF

View File

@@ -23,7 +23,7 @@ endif ()
# endif () # endif ()
qidistudio_add_cmake_project(wxWidgets qidistudio_add_cmake_project(wxWidgets
GIT_REPOSITORY "https://github.com/bambulab/wxWidgets" GIT_REPOSITORY "https://github.com/qiditech/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

View File

@@ -13,7 +13,7 @@ Full manual for GNUgettext can be seen here: http://www.gnu.org/software/gettext
### Scenario 1. How do I add a translation or fix an existing translation ### Scenario 1. How do I add a translation or fix an existing translation
1. Get PO-file 'QIDIStudio_xx.pot' from corresponding sub-folder here: 1. Get PO-file 'QIDIStudio_xx.pot' from corresponding sub-folder here:
https://github.com/qidilab/QIDIStudio/tree/master/qdt/i18n https://github.com/qiditech/QIDIStudio/tree/master/qdt/i18n
2. Open this file in PoEdit as "Edit a translation" 2. Open this file in PoEdit as "Edit a translation"
3. Apply your corrections to the translation 3. Apply your corrections to the translation
4. Push changed QIDIStudio_xx.po into the original folder 4. Push changed QIDIStudio_xx.po into the original folder
@@ -21,14 +21,14 @@ https://github.com/qidilab/QIDIStudio/tree/master/qdt/i18n
### Scenario 2. How do I add a new language support ### Scenario 2. How do I add a new language support
1. Get file QIDIStudio.pot here : 1. Get file QIDIStudio.pot here :
https://github.com/qidilab/QIDIStudio/tree/master/qdt/i18n https://github.com/qiditech/QIDIStudio/tree/master/qdt/i18n
2. Open it in PoEdit for "Create new translation" 2. Open it in PoEdit for "Create new translation"
3. Select Translation Language (for example French). 3. Select Translation Language (for example French).
4. As a result you will have fr.po - the file containing translation to French. 4. As a result you will have fr.po - the file containing translation to French.
Notice. When the translation is complete you need to: Notice. When the translation is complete you need to:
- Rename the file to QIDIStudio_fr.po - Rename the file to QIDIStudio_fr.po
- Click "Save file" button. QIDIStudio_fr.mo will be created immediately - Click "Save file" button. QIDIStudio_fr.mo will be created immediately
- QIDI_Studio_fr.po needs to be copied into the sub-folder fr of https://github.com/qidilab/QIDIStudio/tree/master/qdt/i18n, and be pushed - QIDI_Studio_fr.po needs to be copied into the sub-folder fr of https://github.com/qiditech/QIDIStudio/tree/master/qdt/i18n, and be pushed
- copy QIDIStudio_xx.mo into resources/i18n/xx and rename it to QIDIStudio.mo, then push the changed file. - copy QIDIStudio_xx.mo into resources/i18n/xx and rename it to QIDIStudio.mo, then push the changed file.
( name of folder "fr" means "French" - the translation language). ( name of folder "fr" means "French" - the translation language).
@@ -43,7 +43,7 @@ If you add new file resource, add it to the list of files containing macro `L()`
### Scenario 4. How do I use GNUgettext to localize my own application taking QIDI Studio as an example ### Scenario 4. How do I use GNUgettext to localize my own application taking QIDI Studio as an example
1. For convenience create a list of files with this macro `L(s)`. We have 1. For convenience create a list of files with this macro `L(s)`. We have
https://github.com/qidilab/QIDIStudio/blob/master/qdt/i18n/list.txt. https://github.com/qiditech/QIDIStudio/blob/master/qdt/i18n/list.txt.
2. Create template file(*.POT) with GNUgettext command: 2. Create template file(*.POT) with GNUgettext command:
``` ```

View File

@@ -15,4 +15,4 @@
7. 支持匈牙利语 7. 支持匈牙利语
8. 一些关键问题修复 8. 一些关键问题修复
详细信息请查看https://github.com/qidilab/QIDIStudio/releases 详细信息请查看https://github.com/qiditech/QIDIStudio/releases

View File

@@ -15,4 +15,4 @@
7. Added Magyar translations 7. Added Magyar translations
8. Fixed some known bugs 8. Fixed some known bugs
For details, please check https://github.com/qidilab/QIDIStudio/releases For details, please check https://github.com/qiditech/QIDIStudio/releases

62
linux.d/debian Normal file
View File

@@ -0,0 +1,62 @@
FOUND_GTK3=$(dpkg -l libgtk* | grep gtk-3)
REQUIRED_DEV_PACKAGES=(
autoconf
build-essential
ninja-build
cmake
extra-cmake-modules
file
gettext
git
wget
libgstreamerd-3-dev
libsecret-1-dev
libosmesa6-dev
libssl-dev
eglexternalplatform-dev
libcurl4-openssl-dev
libdbus-1-dev
libglew-dev
libudev-dev
libmspack-dev
libgl1-mesa-dev
libgtk-3-dev
libxkbcommon-dev
libtool
libunwind-dev
libfuse2
texinfo
nasm
yasm
libx264-dev
)
if [[ -n "$UPDATE_LIB" ]]
then
# for ubuntu 22+ and 23+:
ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)"
if [ $ubu_major_version = "22" ] || [ $ubu_major_version = "23" ]
then
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev curl libfuse-dev libssl-dev libcurl4-openssl-dev m4)
elif [ $ubu_major_version = "24" ]
then
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.1-dev)
else
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev)
fi
if [[ -n "$BUILD_DEBUG" ]]
then
REQUIRED_DEV_PACKAGES+=(libssl-dev libcurl4-openssl-dev)
fi
# TODO: optimize this by checking which, if any, packages are already installed
# install them all at once
sudo apt update
sudo apt install -y ${REQUIRED_DEV_PACKAGES[@]}
echo -e "done\n"
exit 0
fi
FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '')

66
linux.d/fedora Normal file
View File

@@ -0,0 +1,66 @@
FOUND_GTK3=$(rpm -qa | grep -P '^gtk3' || true)
REQUIRED_DEV_PACKAGES=(
autoconf
automake
cmake
dbus-devel
eglexternalplatform-devel
extra-cmake-modules
file
gcc
gcc-c++
gettext
git
perl
gstreamer1-devel
gstreamer1-plugins-base-devel
gstreamer1-plugin-openh264
gstreamermm-devel
gtk3-devel
libmspack-devel
libsecret-devel
libtool
m4
mesa-libGLU-devel
mesa-libOSMesa-devel
mesa-libGL-devel
ninja-build
openssl-devel
perl-FindBin
texinfo
wayland-devel
wayland-protocols-devel
libxkbcommon-devel
wget
libcurl-devel
libquadmath-devel
nasm
yasm
x264-devel
)
if [[ -n "$UPDATE_LIB" ]]
then
NEEDED_PKGS=""
fedora_version=$(awk -F= '/^VERSION_ID=/ {print $2}' /etc/os-release)
if [ $fedora_version == "40" ]
then
REQUIRED_DEV_PACKAGES+=(webkit2gtk4.1-devel)
else
REQUIRED_DEV_PACKAGES+=(webkit2gtk4.0-devel)
fi
for PKG in ${REQUIRED_DEV_PACKAGES[@]}; do
rpm -q ${PKG} > /dev/null || NEEDED_PKGS+=" ${PKG}"
done
if [ -n "${NEEDED_PKGS}" ]; then
sudo dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf -y update
sudo dnf install -y ${NEEDED_PKGS}
fi
echo -e "done\n"
exit 0
fi
FOUND_GTK3_DEV=$(rpm -qa | grep -P '^gtk3-devel' || true)

View File

@@ -17,9 +17,12 @@ const std::string Extrusion_Role_Tag = " FEATURE: ";
const std::string Width_Tag = " LINE_WIDTH: "; const std::string Width_Tag = " LINE_WIDTH: ";
const std::string Wipe_Start_Tag = " WIPE_START"; const std::string Wipe_Start_Tag = " WIPE_START";
const std::string Wipe_End_Tag = " WIPE_END"; const std::string Wipe_End_Tag = " WIPE_END";
const std::string Wipe_Tower_Start_Tag = " WIPE_TOWER_START";
const std::string Wipe_Tower_End_Tag = " WIPE_TOWER_END";
const std::string Layer_Change_Tag = " CHANGE_LAYER"; const std::string Layer_Change_Tag = " CHANGE_LAYER";
const std::string Height_Tag = " LAYER_HEIGHT: "; const std::string Height_Tag = " LAYER_HEIGHT: ";
const std::string filament_flow_ratio_tag = " filament_flow_ratio"; const std::string filament_flow_ratio_tag = " filament_flow_ratio";
const std::string has_scarf_joint_seam_tag = " has_scarf_joint_seam";
const std::string nozzle_temperature_Tag = " nozzle_temperature ="; const std::string nozzle_temperature_Tag = " nozzle_temperature =";
const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_initial_layer"; const std::string nozzle_temperature_initial_layer_Tag = " nozzle_temperature_initial_layer";
const std::string Z_HEIGHT_TAG = " Z_HEIGHT: "; const std::string Z_HEIGHT_TAG = " Z_HEIGHT: ";
@@ -130,6 +133,12 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
m_wiping = true; m_wiping = true;
} else if (starts_with(comment, Wipe_End_Tag)) { } else if (starts_with(comment, Wipe_End_Tag)) {
m_wiping = false; m_wiping = false;
}
else if (starts_with(comment, Wipe_Tower_Start_Tag)) {
is_wipe_tower = true;
}
else if (starts_with(comment, Wipe_Tower_End_Tag)) {
is_wipe_tower = false;
} else if (starts_with(comment, Height_Tag)) { } else if (starts_with(comment, Height_Tag)) {
std::string str = comment.substr(Height_Tag.size()); std::string str = comment.substr(Height_Tag.size());
if (!parse_double_from_str(str, m_height)) { if (!parse_double_from_str(str, m_height)) {
@@ -162,6 +171,11 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
} }
else if (starts_with(comment, has_scarf_joint_seam_tag))
{
std::string str = comment.substr(has_scarf_joint_seam_tag.size() + 3);
has_scarf_joint_seam = (str == "1");
}
else if (starts_with(comment, nozzle_temperature_Tag)) { else if (starts_with(comment, nozzle_temperature_Tag)) {
std::string str = comment.substr(nozzle_temperature_Tag.size() + 1); std::string str = comment.substr(nozzle_temperature_Tag.size() + 1);
if (!parse_double_from_str(str, nozzle_temperature)) { if (!parse_double_from_str(str, nozzle_temperature)) {
@@ -232,6 +246,10 @@ GCodeCheckResult GCodeChecker::parse_command(GCodeLine& gcode_line)
ret = parse_M104_M109(gcode_line); ret = parse_M104_M109(gcode_line);
break; break;
} // Set to nozzle temperature } // Set to nozzle temperature
case 1020: {
ret = parse_M1020(gcode_line);
break;
}
default: { break; } default: { break; }
} }
break; break;
@@ -407,20 +425,31 @@ GCodeCheckResult GCodeChecker::parse_G92(GCodeLine& gcode_line)
return GCodeCheckResult::ParseFailed; return GCodeCheckResult::ParseFailed;
} }
if (gcode_line.has(X)) bool any_found = false;
if (gcode_line.has(X)){
m_origin[X] = m_end_position[X] - gcode_line.get(X); m_origin[X] = m_end_position[X] - gcode_line.get(X);
any_found = true;
}
if (gcode_line.has(Y)) if (gcode_line.has(Y)){
m_origin[Y] = m_end_position[Y] - gcode_line.get(Y); m_origin[Y] = m_end_position[Y] - gcode_line.get(Y);
any_found = true;
}
if (gcode_line.has(Z)) if (gcode_line.has(Z)){
m_origin[Z] = m_end_position[Z] - gcode_line.get(Z); m_origin[Z] = m_end_position[Z] - gcode_line.get(Z);
any_found = true;
}
if (gcode_line.has(E)) if (gcode_line.has(E)){
m_end_position[E] = gcode_line.get(E); m_end_position[E] = gcode_line.get(E);
any_found = true;
}
for (unsigned char a = X; a <= E; ++a) { if (!any_found) {
m_origin[a] = m_end_position[a]; for (unsigned char a = X; a <= E; ++a) {
m_origin[a] = m_end_position[a];
}
} }
return GCodeCheckResult::Success; return GCodeCheckResult::Success;
@@ -469,6 +498,46 @@ GCodeCheckResult GCodeChecker::parse_M104_M109(const GCodeLine &gcode_line)
return GCodeCheckResult::Success; return GCodeCheckResult::Success;
} }
GCodeCheckResult GCodeChecker::parse_M1020(const GCodeLine& gcode_line)
{
const char* c = gcode_line.m_raw.c_str();
const char* rs = strchr(c, 'S');
if (rs != nullptr) {
std::string str = rs;
str = str.substr(1);
for (int i = 0; i < str.size(); i++) {
if (str[i] == ' ')
str = str.substr(0, i);
}
try {
int value = std::stoi(str);
if (value >= 0 && value <= filament_flow_ratio.size() - 1) {
filament_id = value;
flow_ratio = filament_flow_ratio[value];
return GCodeCheckResult::Success;
}
else {
return GCodeCheckResult::ParseFailed;
}
}
catch (std::invalid_argument&) {
std::cout << "Invalid argument: not a valid integer" << std::endl;
return GCodeCheckResult::ParseFailed;
}
catch (std::out_of_range&) {
std::cout << "Out of range: number is too large" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
else
{
std::cout << "Missing 'S' character in the G-code line!" << std::endl;
return GCodeCheckResult::ParseFailed;
}
}
double GCodeChecker::calculate_G1_width(const std::array<double, 3>& source, double GCodeChecker::calculate_G1_width(const std::array<double, 3>& source,
const std::array<double, 3>& target, const std::array<double, 3>& target,
double e, double height, bool is_bridge) const double e, double height, bool is_bridge) const
@@ -593,8 +662,21 @@ GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
std::array<double, 3> target = { m_end_position[X], m_end_position[Y], m_end_position[Z] }; std::array<double, 3> target = { m_end_position[X], m_end_position[Y], m_end_position[Z] };
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill; bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
if (!is_bridge) { if (!is_bridge && !is_wipe_tower) {
double width_real = calculate_G1_width(source, target, delta_pos[E], m_height, is_bridge); double real_height = m_height;
if (line.has(Z) && has_scarf_joint_seam && line.get(Z) != 0)
{
if (line.get(Z) == z_height)
{
return GCodeCheckResult::Success;
}
if (line.get(Z) && line.get(E))
{
return GCodeCheckResult::Success;
}
real_height = line.get(Z) - (z_height - m_height);
}
double width_real = calculate_G1_width(source, target, delta_pos[E], real_height, is_bridge);
if (fabs(width_real - m_width) > WIDTH_THRESHOLD) { if (fabs(width_real - m_width) > WIDTH_THRESHOLD) {
std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl; std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl;
std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl; std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl;

View File

@@ -109,6 +109,7 @@ private:
GCodeCheckResult parse_M82(const GCodeLine& gcode_line); GCodeCheckResult parse_M82(const GCodeLine& gcode_line);
GCodeCheckResult parse_M83(const GCodeLine& gcode_line); GCodeCheckResult parse_M83(const GCodeLine& gcode_line);
GCodeCheckResult parse_M104_M109(const GCodeLine &gcode_line); GCodeCheckResult parse_M104_M109(const GCodeLine &gcode_line);
GCodeCheckResult parse_M1020(const GCodeLine& gcode_line);
GCodeCheckResult parse_comment(GCodeLine& gcode_line); GCodeCheckResult parse_comment(GCodeLine& gcode_line);
@@ -167,7 +168,7 @@ public:
std::string cmd=input; std::string cmd=input;
size_t read = 0; size_t read = 0;
while (cmd.size() >= 5) while (cmd.find(',') != std::string::npos)
{ {
int pt = 0; int pt = 0;
for (pt = 0; pt < cmd.size(); pt++) { for (pt = 0; pt < cmd.size(); pt++) {
@@ -217,6 +218,8 @@ private:
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 is_wipe_tower = 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

File diff suppressed because it is too large Load Diff

17415
qdt/i18n/pl/QIDIStudio_pl.po Normal file

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

BIN
readmeRes/UI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

BIN
readmeRes/qidilink.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -155,7 +155,7 @@ image = images/dailytips_TypesOfSupports.png
; [hint:Printing Silk Filament] ; [hint:Printing Silk Filament]
; text = Printing Silk Filament\nDid you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results. ; text = Printing Silk Filament\nDid you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results.
; documentation_link= https://wiki.qidilab.com/en/x1/manual/printing-with-silk-filaments ; documentation_link= https://wiki.qiditech.com/en/x1/manual/printing-with-silk-filaments
[hint:Brim for better adhesion] [hint:Brim for better adhesion]
text = Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim? text = Brim for better adhesion\nDid you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?
@@ -173,7 +173,7 @@ image = images/dailytips_StackObject.png
# hint:Flush into support/objects/infill] # hint:Flush into support/objects/infill]
# text = Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change? # text = Flush into support/objects/infill\nDid you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?
# documentation_link= https://wiki.qidilab.com/en/software/qidi-studio/reduce-wasting-during-filament-change # documentation_link= https://wiki.qiditech.com/en/software/qidi-studio/reduce-wasting-during-filament-change
[hint:Improve strength] [hint:Improve strength]
text = Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model? text = Improve strength\nDid you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?

View File

@@ -0,0 +1,61 @@
colors
#000000 #C12E1F #00AE42 #545454 #D1D3D5 #5B6579 #F4EE2A #9D432C #5E43B7 #0A2989 #FF6A13 #8E9089
src dst flush
#000000 #F4EE2A 450
#000000 #5E43B7 330
#C12E1F #F4EE2A 420
#C12E1F #FF6A13 210
#00AE42 #D1D3D5 330
#00AE42 #F4EE2A 240
#00AE42 #FF6A13 270
#545454 #00AE42 180
#545454 #D1D3D5 240
#545454 #F4EE2A 270
#545454 #5E43B7 120
#545454 #FF6A13 300
#545454 #8E9089 120
#D1D3D5 #F4EE2A 120
#D1D3D5 #FF6A13 150
#5B6579 #C12E1F 120
#5B6579 #00AE42 90
#5B6579 #D1D3D5 120
#5B6579 #F4EE2A 180
#5B6579 #9D432C 120
#5B6579 #0A2989 90
#5B6579 #FF6A13 180
#5B6579 #8E9089 90
#F4EE2A #000000 120
#F4EE2A #C12E1F 90
#F4EE2A #00AE42 150
#F4EE2A #9D432C 150
#F4EE2A #FF6A13 90
#9D432C #00AE42 240
#9D432C #D1D3D5 300
#9D432C #F4EE2A 270
#9D432C #FF6A13 180
#9D432C #8E9089 210
#5E43B7 #00AE42 180
#5E43B7 #D1D3D5 270
#5E43B7 #F4EE2A 270
#5E43B7 #9D432C 150
#5E43B7 #FF6A13 270
#5E43B7 #8E9089 210
#0A2989 #C12E1F 330
#0A2989 #00AE42 210
#0A2989 #545454 150
#0A2989 #D1D3D5 450
#0A2989 #5B6579 240
#0A2989 #9D432C 270
#0A2989 #5E43B7 180
#0A2989 #FF6A13 390
#0A2989 #8E9089 270
#FF6A13 #C12E1F 90
#FF6A13 #D1D3D5 210
#FF6A13 #F4EE2A 210
#FF6A13 #9D432C 120
#FF6A13 #8E9089 180
#8E9089 #C12E1F 150
#8E9089 #00AE42 120
#8E9089 #D1D3D5 150
#8E9089 #F4EE2A 270
#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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@@ -1,19 +1,20 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <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"
viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve"> viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve">
<path style="fill:#FFFFFF;" d="M60,252c-30.9,0-56-25.1-56-56V60C4,29.1,29.1,4,60,4h136c30.9,0,56,25.1,56,56v136 <g>
c0,30.9-25.1,56-56,56H60z"/> <path fill="#303AB2" d="M196,256H60c-33.1,0-60-26.9-60-60V60C0,26.9,26.9,0,60,0h136c33.1,0,60,26.9,60,60v136
<path style="fill:#4479FB;" d="M196,8c28.7,0,52,23.3,52,52v136c0,28.7-23.3,52-52,52H60c-28.7,0-52-23.3-52-52V60 C256,229.1,229.1,256,196,256z"/>
C8,31.3,31.3,8,60,8H196 M196,0H60C26.9,0,0,26.9,0,60v136c0,33.1,26.9,60,60,60h136c33.1,0,60-26.9,60-60V60 </g>
C256,26.9,229.1,0,196,0L196,0z"/> <g>
<path style="fill:#4479FB;" d="M194.5,188.5c-7.6-3.5-15-7.5-22.2-11.8c-6.8-4.2-13.1-8.5-18.7-12.9c17.1-13.5,23.2-36.1,13.2-56.7 <path fill="#FFFFFF" d="M145,177.9v-13.2v-21.3c0-2.3,1.2-4.5,3.2-5.6l28.3-16.3l13-7.5V93c0-4.6-2.5-8.9-6.5-11.2l-57.8-33.4
C154.1,81,120.5,67.9,91.6,78c-31.6,11-41,43-25.8,68.7c-48.2-53.1,7.3-123.8,85-99.8c26.2,8.1,48.9,25.8,60.8,50.2 c-4-2.3-8.9-2.3-13,0L54.5,81.8c-4,2.3-6.5,6.6-6.5,11.2v66.7c0,4.6,2.5,8.9,6.5,11.2l57.8,33.4c4,2.3,8.9,2.3,13,0l19.7-11.4l0,0
C227.4,129.7,219.5,165.3,194.5,188.5z"/> V177.9z M125.2,115.2c-4,2.3-6.5,6.6-6.5,11.2v55.4c0,5-5.4,8.1-9.7,5.6l-44.8-25.9c-2-1.2-3.2-3.3-3.2-5.6V96.7
<path style="fill:#4479FB;" d="M34.7,158.5c17.6,36.2,59,57.6,100.3,54.8c-16.2-6.1-32-16-45-29c-7.8-7.8-13.8-16-18.2-24.2 c0-2.3,1.2-4.5,3.2-5.6l51.3-29.6c2-1.2,4.5-1.2,6.5,0l38.3,22.1c4.3,2.5,4.3,8.7,0,11.2L125.2,115.2z"/>
c-9.1-6.3-16.9-14.3-23-23.6C37.5,118.9,34.6,99.6,39,82C24.6,104.1,21.9,132.2,34.7,158.5L34.7,158.5z"/> </g>
<path style="fill:#4479FB;" d="M234.5,206.6c-28.2,6.1-68-4.1-97.8-26.7c-35.1-26.6-43.5-60.9-19.9-78.1c-8,18.8,7,47.1,40.6,71.4 <g>
C181.1,190.4,209.2,202,234.5,206.6z"/> <path fill="#FFFFFF" d="M198.3,108.9l-8.8,5.1v18.2v1.8v22.1v7.5c0,2.3-1.2,4.4-3.2,5.5l0,0l-0.7,0.4l-0.9,0.5l-8.1,4.7l-5.2,3
<path style="fill:#4479FB;" d="M187.4,212.9c-29.6,5.2-68.1-7.9-94.8-34.2c-33-32.6-35.5-73.3-5.5-90.8c12-7,27.4-9.2,43.6-7.3 L145,192.9l0,0v6.4v3.1v0.1c0,0,0,0,0,0v0.4c0.1,4.8,5.2,7.9,9.5,5.7l0.2-0.1l5.2-3l44.9-26c2-1.2,3.2-3.3,3.2-5.6v-59.4
c-4.7,1.3-9.2,3.1-13.2,5.4c-30,17.5-26.8,58.9,7.2,92.4C142.6,196.1,165.4,208.1,187.4,212.9L187.4,212.9z"/> C208,109.5,202.6,106.4,198.3,108.9z"/>
</g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,38 +1,47 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<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" <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"
width="562px" height="238px" viewBox="0 0 562 238" enable-background="new 0 0 562 238" xml:space="preserve"> viewBox="0 0 562 238" enable-background="new 0 0 562 238" xml:space="preserve">
<rect x="1" y="0.5" fill="#4479FB" width="560" height="237"/> <rect fill="#303AB2" width="562" height="238"/>
<path fill="#FFFFFF" d="M236.5,154.5l1.6,1.8c0.5-0.6,0.9-1.3,1.2-1.9c0.2-0.7,0.4-1.4,0.4-2.2c0-0.9-0.1-1.7-0.4-2.4 <g>
c-0.3-0.8-0.8-1.5-1.3-2c-0.6-0.6-1.3-1.1-2-1.4c-0.8-0.3-1.5-0.5-2.3-0.5c-0.8,0-1.6,0.2-2.4,0.5c-0.8,0.3-1.4,0.8-2,1.4 <g>
c-0.6,0.6-1.1,1.3-1.4,2c-0.3,0.8-0.4,1.6-0.4,2.4c0,1.8,0.6,3.3,1.8,4.5c1.2,1.2,2.7,1.8,4.5,1.8c0.5,0,0.9,0,1.4-0.2 <g>
c0.4-0.1,0.9-0.3,1.3-0.5l-3.1-3.3H236.5z M240,158.3l3.6,3.9h-3.3l-2.2-2.4c-0.8,0.4-1.5,0.7-2.3,0.9c-0.8,0.2-1.6,0.3-2.4,0.3 <path fill="#FFFFFF" d="M335.8,111.2h-7.3c-1.1,0-2,0.9-2,2v27.7c0,1.1,0.9,2,2,2h7.3c1.1,0,2-0.9,2-2v-27.7
c-1.2,0-2.3-0.2-3.4-0.7c-1.1-0.4-2.1-1.1-2.9-1.9c-0.9-0.8-1.5-1.8-2-2.9s-0.7-2.2-0.7-3.4s0.2-2.3,0.7-3.4c0.4-1.1,1.1-2,2-2.9 C337.8,112.1,336.9,111.2,335.8,111.2z"/>
c0.8-0.8,1.8-1.5,2.9-1.9c1.1-0.4,2.3-0.7,3.5-0.7c1.2,0,2.4,0.2,3.5,0.7c1.1,0.4,2.1,1.1,2.9,1.9c0.8,0.8,1.5,1.8,1.9,2.9 <path fill="#FFFFFF" d="M333.3,104.4h-2.5c-2.4,0-4.4-2-4.4-4.4v-2.5c0-2.4,2-4.4,4.4-4.4h2.5c2.4,0,4.4,2,4.4,4.4v2.5
c0.5,1.1,0.7,2.2,0.7,3.4c0,1.2-0.2,2.3-0.7,3.3C241.4,156.5,240.8,157.5,240,158.3L240,158.3z M245.8,160.6v-17h2.8v17H245.8z C337.8,102.4,335.8,104.4,333.3,104.4z"/>
M255.5,158.1h2.3c1.3,0,2.2-0.1,2.9-0.3c0.6-0.2,1.2-0.5,1.7-0.9c0.6-0.5,1.1-1.2,1.4-2c0.3-0.8,0.5-1.8,0.5-2.8s-0.2-2-0.5-2.8 </g>
c-0.3-0.8-0.8-1.5-1.4-2c-0.5-0.4-1.1-0.7-1.7-0.9c-0.7-0.2-1.7-0.3-3.1-0.3h-1h-1V158.1z M252.7,160.6v-17h3.7 <g>
c2.4,0,4.1,0.1,5.1,0.4c1,0.2,1.8,0.7,2.6,1.2c1,0.8,1.7,1.7,2.2,2.9s0.8,2.5,0.8,4s-0.2,2.8-0.8,4c-0.5,1.2-1.2,2.1-2.2,2.9 <path fill="#FFFFFF" d="M419.5,111.2h-7.3c-1.1,0-2,0.9-2,2v27.7c0,1.1,0.9,2,2,2h7.3c1.1,0,2-0.9,2-2v-27.7
c-0.8,0.6-1.6,1-2.5,1.2c-0.9,0.3-2.4,0.4-4.4,0.4h-0.8H252.7z M270.4,160.6v-17h2.8v17H270.4z"/> C421.5,112.1,420.6,111.2,419.5,111.2z"/>
<path fill="#FFFFFF" d="M282.7,160.6v-13h-3.8v-4h12.2v4h-3.8v13H282.7z M293.5,160.6v-17h10.4v3.7H298v2.9h5.6v3.6H298v2.9h5.9v3.8 <path fill="#FFFFFF" d="M417.1,104.4h-2.5c-2.4,0-4.4-2-4.4-4.4v-2.5c0-2.4,2-4.4,4.4-4.4h2.5c2.4,0,4.4,2,4.4,4.4v2.5
H293.5z M319.4,144.3v5c-0.6-0.7-1.3-1.2-1.9-1.5c-0.6-0.3-1.3-0.5-2-0.5c-1.3,0-2.4,0.4-3.2,1.4c-0.8,0.9-1.2,2.1-1.2,3.5 C421.5,102.4,419.5,104.4,417.1,104.4z"/>
c0,1.4,0.4,2.5,1.2,3.4c0.8,0.9,1.9,1.3,3.2,1.3c0.7,0,1.4-0.2,2-0.5c0.6-0.3,1.3-0.8,1.9-1.5v5.1c-0.8,0.4-1.5,0.6-2.2,0.8 </g>
c-0.7,0.2-1.5,0.3-2.2,0.3c-0.9,0-1.8-0.1-2.6-0.3c-0.8-0.2-1.5-0.6-2.2-1c-1.3-0.8-2.2-1.9-2.9-3.2c-0.7-1.3-1-2.7-1-4.4 <path fill="#FFFFFF" d="M380.2,93.1h-3h-4.6h-8.8h-4H351c-1.1,0-2,0.9-2,2v7.3c0,1.1,0.9,2,2,2h8.8v0h12.8h1.4h3.2h2.5
c0-1.3,0.2-2.5,0.6-3.5c0.4-1.1,1.1-2,1.9-2.9c0.8-0.8,1.7-1.5,2.7-1.9c1-0.4,2.1-0.6,3.4-0.6c0.7,0,1.5,0.1,2.2,0.3 c4.4,0,7.9,3.5,7.9,7.9v5.7v0v5.7c0,4.4-3.5,7.9-7.9,7.9H374h-5.2h-0.5h-5.9c-1.1,0-2-0.9-2-2v-5.9V122v-0.5V120c0-1.1-0.9-2-2-2
C318,143.7,318.7,143.9,319.4,144.3L319.4,144.3z M322.2,160.6v-17h4.6v6.6h6.2v-6.6h4.6v17H333v-6.9h-6.2v6.9H322.2z"/> H351c-1.1,0-2,0.9-2,2v1.5h0v19.4c0,1.1,0.9,2,2,2h0.8h8.5h6c0.5,0,0.9,0.1,1.4,0.1c0,0,0,0,0,0v0h12.5c10.3,0,18.7-8.4,18.7-18.7
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M247.2,112.8c6.5,13.4,21.8,21.3,37.1,20.3 V118v0v-6.2C398.9,101.5,390.5,93.1,380.2,93.1z"/>
c-6-2.3-11.8-5.9-16.6-10.7c-2.9-2.9-5.1-5.9-6.7-8.9c-3.3-2.3-6.2-5.3-8.5-8.7c-4.2-6.5-5.2-13.6-3.6-20.1 <g>
C243.5,92.7,242.5,103.1,247.2,112.8L247.2,112.8z M292.4,131.7c0.2-0.1,0.5-0.1,0.7-0.2l-1.8-0.3 <path fill="#FFFFFF" d="M296.5,93.1C296.5,93.1,296.5,93.1,296.5,93.1L296.5,93.1H284c-10.3,0-18.7,8.4-18.7,18.7v2.3v3.9v0v5.7
C291.7,131.3,292,131.5,292.4,131.7L292.4,131.7z M300.6,128.2c1.4-0.8,2.7-1.7,3.9-2.7c-3.2-1.4-6.3-3-9.3-4.7 v0.5c0,10.3,8.4,18.7,18.7,18.7h4.3c1.1,0,2-0.9,2-2v-7.3c0-1.1-0.9-2-2-2h-3.7c-4.4,0-7.9-3.5-7.9-7.9V118v0v-3.9v-1.8
c-0.5,0.1-1.1,0.2-1.6,0.4l7.8,5.4L300.6,128.2z M306.3,123.9c7.2-6.8,10.6-16.3,8.9-26c0.8,9.6-6.1,18.1-16.7,21.8 c0-4.4,3.5-7.9,7.9-7.9h11.4c4.4,0,7.9,3.5,7.9,7.9v3.7c0,1.1,0.9,2,2,2h7.3c1.1,0,2-0.9,2-2v-4.1c0,0,0-0.1,0-0.1
C301,121.3,303.6,122.7,306.3,123.9L306.3,123.9z"/> C315.1,101.4,306.8,93.1,296.5,93.1z"/>
<path fill="#FFFFFF" d="M306.3,123.9c-2.8-1.3-5.6-2.8-8.2-4.4c-2.5-1.5-4.8-3.1-6.9-4.8c6.3-5,8.6-13.3,4.9-21 <g>
c-4.7-9.6-17.1-14.5-27.8-10.8c-11.7,4.1-15.2,15.9-9.5,25.4c-17.8-19.6,2.7-45.7,31.4-36.9c9.7,3,18.1,9.5,22.5,18.5 <path fill="#FFFFFF" d="M314.6,134.4l-15.8-15.8c-0.4-0.4-0.9-0.6-1.4-0.6l-10.4,0c-1.8,0-2.6,2.1-1.4,3.4l21,21
C318.4,102.2,315.5,115.4,306.3,123.9z"/> c0.8,0.8,2,0.8,2.8,0l5.2-5.2C315.3,136.4,315.3,135.1,314.6,134.4z"/>
<path fill="#FFFFFF" d="M247.2,112.8c6.5,13.4,21.8,21.3,37,20.3c-6-2.3-11.8-5.9-16.6-10.7c-2.9-2.9-5.1-5.9-6.7-8.9 </g>
c-3.3-2.3-6.3-5.3-8.5-8.7c-4.2-6.5-5.2-13.6-3.6-20.1C243.5,92.7,242.5,103.1,247.2,112.8L247.2,112.8z"/> </g>
<path fill="#FFFFFF" d="M321.1,130.6c-10.4,2.2-25.1-1.5-36.1-9.9c-13-9.8-16.1-22.5-7.4-28.8c-2.9,7,2.6,17.4,15,26.4 </g>
C301.3,124.6,311.7,128.9,321.1,130.6z"/> <g>
<path fill="#FFFFFF" d="M303.7,132.9c-10.9,1.9-25.2-2.9-35-12.6c-12.2-12.1-13.1-27.1-2-33.5c4.4-2.6,10.1-3.4,16.1-2.7 <g>
c-1.8,0.5-3.4,1.1-4.9,2c-11.1,6.5-9.9,21.8,2.6,34.1C287.1,126.7,295.5,131.2,303.7,132.9L303.7,132.9z"/> <path fill="#FFFFFF" d="M199.7,149.5v-8.1v-13c0-1.4,0.8-2.7,2-3.4l17.3-10l7.9-4.6V97.6c0-2.8-1.5-5.4-4-6.8l-35.3-20.4
c-2.4-1.4-5.5-1.4-7.9,0l-35.3,20.4c-2.4,1.4-4,4-4,6.8v40.7c0,2.8,1.5,5.4,4,6.8l35.3,20.4c2.4,1.4,5.5,1.4,7.9,0l12-7l0,0
V149.5z M187.6,111.2c-2.4,1.4-3.9,4-3.9,6.8v33.8c0,3-3.3,4.9-5.9,3.4l-27.3-15.8c-1.2-0.7-2-2-2-3.4V99.9c0-1.4,0.8-2.7,2-3.4
l31.3-18.1c1.2-0.7,2.7-0.7,4,0L209,91.9c2.6,1.5,2.6,5.3,0,6.8L187.6,111.2z"/>
</g>
<path fill="#FFFFFF" d="M232.2,107.3l-5.4,3.1v11.1v1.1v13.5v4.6c0,1.4-0.8,2.7-2,3.3l0,0l-0.4,0.2l-0.6,0.3l-5,2.9l-3.2,1.8
l-16,9.3l0,0v3.9v1.9v0.1c0,0,0,0,0,0v0.2c0.1,2.9,3.2,4.8,5.8,3.5l0.1-0.1l3.2-1.8l27.4-15.9c1.2-0.7,2-2,2-3.4v-36.2
C238.1,107.7,234.8,105.8,232.2,107.3z"/>
</g>
</g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M6.5,14.5a1,1,0,0,1-1-1v-9h-4a1,1,0,0,1-1-1v-2a1,1,0,0,1,1-1h12a1,1,0,0,1,1,1v2a1,1,0,0,1-1,1h-4v2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="8.5" y1="8.5" x2="14.5" y2="14.5" style="fill:none;stroke:#009688;stroke-linejoin:round"/><line x1="14.5" y1="8.5" x2="8.5" y2="14.5" style="fill:none;stroke:#009688;stroke-linejoin:round"/><line x1="11.5" y1="8.5" x2="11.5" y2="14.5" style="fill:none;stroke:#009688;stroke-linecap:square;stroke-linejoin:round"/><line x1="14.5" y1="11.5" x2="8.5" y2="11.5" style="fill:none;stroke:#009688;stroke-linecap:square;stroke-linejoin:round"/></svg>

After

Width:  |  Height:  |  Size: 721 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="M6.5,14.5a1,1,0,0,1-1-1v-9h-4a1,1,0,0,1-1-1v-2a1,1,0,0,1,1-1h12a1,1,0,0,1,1,1v2a1,1,0,0,1-1,1h-4v2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M15,11.5A3.5,3.5,0,1,1,11.5,8,3.5,3.5,0,0,1,15,11.5ZM14,11H9v1h5Z" style="fill:#009688"/></svg>

After

Width:  |  Height:  |  Size: 373 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="M6.5,14.5a1,1,0,0,1-1-1v-9h-4a1,1,0,0,1-1-1v-2a1,1,0,0,1,1-1h12a1,1,0,0,1,1,1v2a1,1,0,0,1-1,1h-4v2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M15,11.5A3.5,3.5,0,1,1,11.5,8,3.5,3.5,0,0,1,15,11.5ZM14,11H12V9H11v2H9v1h2v2h1V12h2Z" style="fill:#009688"/></svg>

After

Width:  |  Height:  |  Size: 392 B

View File

@@ -0,0 +1,3 @@
<svg width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.346 0.361999H5.068V3.078H7.77V4.786H5.068V7.502H3.346V4.786H0.63V3.078H3.346V0.361999Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 214 B

View File

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 214 B

View File

@@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.10031 1.86719C2.27188 1.86719 1.60031 2.53877 1.60031 3.36719V9.01149C0.843171 9.08758 0.252106 9.72671 0.252106 10.5039V15.6221C0.252106 16.4506 0.923676 17.1221 1.7521 17.1221H9.05122C10.1743 18.3923 11.8161 19.1931 13.6449 19.1931C17.0303 19.1931 19.7747 16.4487 19.7747 13.0633C19.7747 10.6147 18.339 8.50146 16.2634 7.51942V3.36719C16.2634 2.53877 15.5918 1.86719 14.7634 1.86719H3.10031ZM15.2634 7.14953V3.36719C15.2634 3.09105 15.0395 2.86719 14.7634 2.86719H3.10031C2.82417 2.86719 2.60031 3.09105 2.60031 3.36719V9.00377H3.15292V3.96484H5.79236H6.79239H8.43182H9.43183H11.0713H12.0713H14.7107V7.02592C14.898 7.05876 15.0824 7.1001 15.2634 7.14953ZM13.7107 6.93394V4.96484H12.0713V7.13745C12.5735 7.00446 13.1009 6.93359 13.6449 6.93359C13.6669 6.93359 13.6888 6.93371 13.7107 6.93394ZM11.0713 7.49841V4.96484H9.43182L9.43183 8.61091C9.91152 8.15685 10.4645 7.77947 11.0713 7.49841ZM8.3317 10.0045H5.79236V10.0045H3.15292V10.0039H1.75211C1.47596 10.0039 1.25211 10.2278 1.25211 10.5039V15.6221C1.25211 15.8983 1.47596 16.1221 1.7521 16.1221H8.33162C7.81228 15.2219 7.51514 14.1773 7.51514 13.0633C7.51514 11.9493 7.81231 10.9047 8.3317 10.0045ZM8.43183 4.96484V9.00377H6.79239V4.96484H8.43183ZM5.79236 4.96484H4.15292V9.00377H5.79236V4.96484ZM18.7747 13.0633C18.7747 15.8964 16.478 18.1931 13.6449 18.1931C10.8118 18.1931 8.51514 15.8964 8.51514 13.0633C8.51514 10.2302 10.8118 7.93359 13.6449 7.93359C16.478 7.93359 18.7747 10.2302 18.7747 13.0633ZM14.455 10.2226C14.6503 10.0273 14.9669 10.0273 15.1621 10.2226L16.6376 11.698C16.7806 11.841 16.8234 12.0561 16.746 12.2429C16.6686 12.4298 16.4863 12.5516 16.284 12.5516H11.0631C10.787 12.5516 10.5631 12.3277 10.5631 12.0516C10.5631 11.7754 10.787 11.5516 11.0631 11.5516H15.0769L14.455 10.9297C14.2598 10.7344 14.2598 10.4178 14.455 10.2226ZM12.1276 15.9053C12.3229 16.1005 12.6395 16.1005 12.8347 15.9053C13.03 15.71 13.03 15.3934 12.8347 15.1982L12.2128 14.5762H16.2266C16.5028 14.5762 16.7266 14.3524 16.7266 14.0762C16.7266 13.8001 16.5028 13.5762 16.2266 13.5762H11.0057C10.8035 13.5762 10.6212 13.6981 10.5438 13.8849C10.4664 14.0717 10.5092 14.2868 10.6522 14.4298L12.1276 15.9053Z" fill="#262E30"/>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="2.5" y1="1.5" x2="12.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.5"/><path d="M1.541,12.5A12,12,0,0,1,12.5,1.541" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="12.5" y="0.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="0.5" y="12.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="1.5" r="1.5" style="fill:#949494"/></svg>

After

Width:  |  Height:  |  Size: 641 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="M6.5,14.5h2a1,1,0,0,0,1-1v-9h4a1,1,0,0,0,1-1v-2a1,1,0,0,0-1-1H1.5a1,1,0,0,0-1,1v2a1,1,0,0,0,1,1h4v9a1,1,0,0,0,1,1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>

After

Width:  |  Height:  |  Size: 290 B

View File

@@ -1,7 +1,7 @@
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_8986_34986)"> <g clip-path="url(#clip0_8986_34986)">
<rect x="0.906738" y="0.75" width="8.18652" height="8.5" rx="0.25" stroke="#262E30" stroke-width="0.5"/> <rect x="0.906738" y="0.75" width="8.18652" height="8.5" rx="0.25" stroke="#262E30" stroke-width="0.5"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.44384 9.15385H8.70117C8.97731 9.15385 9.20117 8.92999 9.20117 8.65385V7.77134C9.01185 8.27195 8.7555 8.73679 8.44384 9.15385ZM9.20117 3.82879C8.50648 2.15978 6.91732 1 5.07962 1C3.0001 1 1.29827 2.76362 1.29827 4.96686C1.29827 6.81838 2.72798 8.30496 4.47852 8.30496C5.94047 8.30496 7.13782 7.06157 7.13782 5.51178C7.13782 4.20557 6.13326 3.17131 4.91131 3.17131C3.89774 3.17131 3.05347 4.0379 3.05347 5.12614C3.05347 6.02995 3.75348 6.74564 4.59072 6.74564C5.28371 6.74564 5.8635 6.1557 5.8635 5.40279C5.8635 4.78402 5.3879 4.30307 4.82315 4.30307C4.36259 4.30307 3.97515 4.69181 3.97515 5.20159C3.97515 5.6122 4.29181 5.93245 4.66286 5.93245C4.95511 5.93245 5.2063 5.68623 5.2063 5.35249C5.2063 5.09421 5.0032 4.89829 4.78307 4.89829C4.68224 4.89829 4.62549 4.93068 4.59194 4.96752C4.55575 5.00726 4.52157 5.08014 4.52157 5.20159C4.52157 5.31575 4.54634 5.35545 4.55458 5.36503L4.55474 5.36522C4.55684 5.36774 4.5704 5.38402 4.62626 5.38915C4.62683 5.38149 4.62732 5.3728 4.62771 5.36297C4.62901 5.32972 4.62886 5.29548 4.62868 5.25362V5.25361L4.62853 5.20159C4.62853 5.06352 4.74046 4.95159 4.87853 4.95159C5.0166 4.95159 5.12853 5.06352 5.12853 5.20159L5.12866 5.24197C5.12886 5.28728 5.12909 5.33744 5.12732 5.38257C5.12499 5.44205 5.11881 5.51557 5.09642 5.58704C5.07283 5.66237 5.02736 5.7474 4.93969 5.80987C4.85359 5.87123 4.75495 5.89069 4.66286 5.89069C4.4794 5.89069 4.30122 5.83726 4.17547 5.69103C4.0562 5.55233 4.02157 5.37247 4.02157 5.20159C4.02157 4.98771 4.08286 4.78393 4.22227 4.63086C4.36432 4.47488 4.56332 4.39829 4.78307 4.39829C5.3003 4.39829 5.7063 4.8395 5.7063 5.35249C5.7063 5.94093 5.25221 6.43245 4.66286 6.43245C3.992 6.43245 3.47515 5.86406 3.47515 5.20159C3.47515 4.4371 4.06549 3.80307 4.82315 3.80307C5.685 3.80307 6.3635 4.52932 6.3635 5.40279C6.3635 6.41041 5.58081 7.24564 4.59072 7.24564C3.45638 7.24564 2.55347 6.28465 2.55347 5.12614C2.55347 3.7832 3.60064 2.67131 4.91131 2.67131C6.43036 2.67131 7.63782 3.95086 7.63782 5.51178C7.63782 7.31536 6.23845 8.80496 4.47852 8.80496C2.43013 8.80496 0.798266 7.07231 0.798266 4.96686C0.798266 2.50892 2.703 0.5 5.07962 0.5C6.79575 0.5 8.30297 1.40023 9.20117 2.76765V3.82879Z" fill="#262E30"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M 8.4438 9.1539 H 8.7012 C 8.9773 9.1539 9.2012 8.93 9.2012 8.6539 V 7.7713 C 9.0119 8.272 8.7555 8.7368 8.4438 9.1539 Z M 9.2012 3.8288 C 8.5065 2.1598 6.93 1.034 5.083 1.017 C 2.782 1.027 1.06 2.838 1.055 4.949 C 1.093 7.012 2.315 8.449 4.443 8.472 C 6.229 8.469 7.388 7.067 7.388 5.597 C 7.375 4.094 6.057 3.257 5.137 3.255 C 4.05 3.261 3.288 3.912 3.282 4.997 C 3.286 5.783 3.937 6.291 4.447 6.291 C 5.047 6.277 5.255 5.872 5.259 5.666 C 5.261 5.432 5.065 5.307 4.866 5.481 C 4.53 5.663 4.244 5.057 4.942 4.827 C 5.359 4.73 5.766 5.095 5.77 5.568 C 5.759 6.389 5.152 6.798 4.434 6.814 C 3.429 6.803 2.728 5.942 2.732 4.984 C 2.737 3.612 3.784 2.734 5.14 2.73 C 6.549 2.743 7.93 3.946 7.939 5.584 C 7.922 7.596 6.442 9.017 4.474 9.021 C 2.65 8.999 1.659 8.176 0.848 6.941 C 0.842 6.291 0.848 5.943 0.841 4.933 C 0.842 4.454 0.837 3.979 0.842 3.234 C 1.231 2.331 2.398 0.508 5.0796 0.5 C 6.7957 0.5 8.303 1.4002 9.2012 2.7677 V 3.8288 Z" fill="#262E30"/>
</g> </g>
<defs> <defs>
<clipPath id="clip0_8986_34986"> <clipPath id="clip0_8986_34986">

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

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