Compare commits
71 Commits
V1.9.5.51
...
v2.01.01.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc0a06deaa | ||
|
|
a253e093f8 | ||
|
|
64806161f0 | ||
|
|
4dadec668b | ||
|
|
eb7e027385 | ||
|
|
7f04d94ea1 | ||
|
|
f60592f1a0 | ||
|
|
e0d447172c | ||
|
|
bafe693d0a | ||
|
|
c56a6849eb | ||
|
|
e8c9baa840 | ||
|
|
688396a0a0 | ||
|
|
8c9640a666 | ||
|
|
37aa092244 | ||
|
|
60d6348a42 | ||
|
|
6d0ec79031 | ||
|
|
b68290818e | ||
|
|
031525a16e | ||
|
|
5ac6bf0ccb | ||
|
|
958f8339bc | ||
|
|
9b0892b7c2 | ||
|
|
ef9e434eac | ||
|
|
652ba5e232 | ||
|
|
18c33f93a6 | ||
|
|
011619cf23 | ||
|
|
126534997a | ||
|
|
eae8e18c3a | ||
|
|
3fe258372a | ||
|
|
524bd808f3 | ||
|
|
156efaf48b | ||
|
|
24b78d2251 | ||
|
|
93ac431989 | ||
|
|
1c65d0ad5a | ||
|
|
a19b41c650 | ||
|
|
ffb5d3da8a | ||
|
|
d32f03deb8 | ||
|
|
7d213ce20c | ||
|
|
29360eb5e5 | ||
|
|
5e2ebff297 | ||
|
|
c2b046e661 | ||
|
|
dcdb92f45e | ||
|
|
fc45eaa121 | ||
|
|
1957136227 | ||
|
|
afc204307c | ||
|
|
b3e22f837b | ||
|
|
e2bde71a1c | ||
|
|
a320582cdc | ||
|
|
360ceaa458 | ||
|
|
973d18ea63 | ||
|
|
1c5fda6cad | ||
|
|
4baf9e41c5 | ||
|
|
dd004ebffd | ||
|
|
1244542711 | ||
|
|
ccb7e095e1 | ||
|
|
79518648c0 | ||
|
|
7eb6543991 | ||
|
|
a26696f35e | ||
|
|
459e7822db | ||
|
|
22572c2286 | ||
|
|
db50a0814e | ||
|
|
506ff7ad8c | ||
|
|
1fe739e6fc | ||
|
|
4514d58c47 | ||
|
|
b907b14a6c | ||
|
|
726068cf1e | ||
|
|
a7223f812f | ||
|
|
72571efb04 | ||
|
|
cc186748ed | ||
|
|
680346707d | ||
|
|
e84f284825 | ||
|
|
acc64cecdc |
1
.gitignore
vendored
@@ -27,3 +27,4 @@ SVG
|
|||||||
**/process_full/
|
**/process_full/
|
||||||
**/machine_full/
|
**/machine_full/
|
||||||
**/filament_full/
|
**/filament_full/
|
||||||
|
.idea/
|
||||||
|
|||||||
@@ -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}" ]]
|
||||||
@@ -119,7 +128,7 @@ fi
|
|||||||
if ! [[ -n "${DISABLE_PARALLEL_LIMIT}" ]]
|
if ! [[ -n "${DISABLE_PARALLEL_LIMIT}" ]]
|
||||||
then
|
then
|
||||||
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)
|
||||||
MAX_THREADS=$(echo "scale=0; $FREE_MEM_GB / 2.5" | bc)
|
MAX_THREADS=$((FREE_MEM_GB * 10 / 25))
|
||||||
if [ "$MAX_THREADS" -lt 1 ]; then
|
if [ "$MAX_THREADS" -lt 1 ]; then
|
||||||
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ 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 +56,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 +171,15 @@ 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")
|
||||||
|
message(STATUS ".git: directory")
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_SOURCE_DIR}/scripts/hooks/pre-commit"
|
||||||
|
"${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
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}")
|
||||||
@@ -362,7 +375,7 @@ endif()
|
|||||||
function(slic3r_remap_configs targets from_Cfg to_Cfg)
|
function(slic3r_remap_configs targets from_Cfg to_Cfg)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
string(TOUPPER ${from_Cfg} from_CFG)
|
string(TOUPPER ${from_Cfg} from_CFG)
|
||||||
|
|
||||||
foreach(tgt ${targets})
|
foreach(tgt ${targets})
|
||||||
if(TARGET ${tgt})
|
if(TARGET ${tgt})
|
||||||
set_target_properties(${tgt} PROPERTIES MAP_IMPORTED_CONFIG_${from_CFG} ${to_Cfg})
|
set_target_properties(${tgt} PROPERTIES MAP_IMPORTED_CONFIG_${from_CFG} ${to_Cfg})
|
||||||
@@ -500,7 +513,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}
|
||||||
@@ -517,7 +530,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()
|
||||||
@@ -619,6 +632,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 +671,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 +770,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)
|
||||||
|
|||||||
@@ -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
@@ -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 $*"
|
||||||
16
DockerRun.sh
@@ -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 $*
|
||||||
|
|
||||||
|
|||||||
79
Dockerfile
@@ -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 Bambu 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"]
|
||||||
|
|||||||
104
README.md
@@ -4,20 +4,116 @@
|
|||||||
# QIDIStudio
|
# QIDIStudio
|
||||||
QIDIStudio is a professional 3D printer slicing software,which 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 software,which 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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.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>
|
||||||
<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>
|
||||||
@@ -129,5 +134,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>
|
||||||
|
|||||||
2
deps/Boost/0001-Boost-fix.patch
vendored
@@ -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
|
||||||
|
|
||||||
|
|||||||
2
deps/Boost/Boost.cmake
vendored
@@ -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/bambulab/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
@@ -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
@@ -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/bambulab/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
@@ -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/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
|
||||||
|
|||||||
24
deps/OCCT/0001-OCCT-fix.patch
vendored
@@ -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;
|
||||||
2
deps/OCCT/OCCT.cmake
vendored
@@ -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_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
|
PATCH_COMMAND ${GIT_EXECUTABLE} apply --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
|
||||||
|
|||||||
2
deps/OpenCV/OpenCV.cmake
vendored
@@ -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_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_EXECUTABLE} apply --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
|
||||||
|
|||||||
4
deps/TIFF/TIFF.cmake
vendored
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -15,4 +15,4 @@
|
|||||||
7. 支持匈牙利语
|
7. 支持匈牙利语
|
||||||
8. 一些关键问题修复
|
8. 一些关键问题修复
|
||||||
|
|
||||||
详细信息请查看:https://github.com/qidilab/QIDIStudio/releases
|
详细信息请查看:https://github.com/qiditech/QIDIStudio/releases
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -27,16 +27,19 @@ REQUIRED_DEV_PACKAGES=(
|
|||||||
libunwind-dev
|
libunwind-dev
|
||||||
libfuse2
|
libfuse2
|
||||||
texinfo
|
texinfo
|
||||||
|
nasm
|
||||||
|
yasm
|
||||||
|
libx264-dev
|
||||||
)
|
)
|
||||||
|
|
||||||
if [[ -n "$UPDATE_LIB" ]]
|
if [[ -n "$UPDATE_LIB" ]]
|
||||||
then
|
then
|
||||||
# for ubuntu 22+ and 23+:
|
# for ubuntu 22+ and 23+:
|
||||||
ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)"
|
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" ]
|
if [ $ubu_major_version = "22" ] || [ $ubu_major_version = "23" ]
|
||||||
then
|
then
|
||||||
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev curl libfuse-dev libssl-dev libcurl4-openssl-dev m4)
|
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev curl libfuse-dev libssl-dev libcurl4-openssl-dev m4)
|
||||||
elif [ $ubu_major_version == "24" ]
|
elif [ $ubu_major_version = "24" ]
|
||||||
then
|
then
|
||||||
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.1-dev)
|
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.1-dev)
|
||||||
else
|
else
|
||||||
@@ -56,4 +59,4 @@ then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '')
|
FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '')
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ REQUIRED_DEV_PACKAGES=(
|
|||||||
wget
|
wget
|
||||||
libcurl-devel
|
libcurl-devel
|
||||||
libquadmath-devel
|
libquadmath-devel
|
||||||
|
nasm
|
||||||
|
yasm
|
||||||
|
x264-devel
|
||||||
)
|
)
|
||||||
|
|
||||||
if [[ -n "$UPDATE_LIB" ]]
|
if [[ -n "$UPDATE_LIB" ]]
|
||||||
@@ -52,6 +55,8 @@ then
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "${NEEDED_PKGS}" ]; then
|
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}
|
sudo dnf install -y ${NEEDED_PKGS}
|
||||||
fi
|
fi
|
||||||
echo -e "done\n"
|
echo -e "done\n"
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -17,14 +18,19 @@ 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: ";
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -35,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')
|
||||||
@@ -43,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -112,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +164,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 +202,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)) {
|
||||||
@@ -175,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;
|
||||||
@@ -232,6 +306,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;
|
||||||
@@ -239,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,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;
|
||||||
@@ -407,20 +500,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;
|
||||||
@@ -455,20 +559,83 @@ 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');
|
||||||
|
|
||||||
std::string str=rs;
|
std::string strS = rs;
|
||||||
str = str.substr(1);
|
strS = strS.substr(1);
|
||||||
for (int i = 0; i < str.size(); i++) {
|
for (int i = 0; i < strS.size(); i++) {
|
||||||
if (str[i] == ' ')
|
if (strS[i] == ' ')
|
||||||
str=str.substr(0,i);
|
strS = strS.substr(0,i);
|
||||||
}
|
}
|
||||||
if (!parse_double_from_str(str, nozzle_temp)) {
|
double temp_nozzle_temp;
|
||||||
|
|
||||||
|
if (!parse_double_from_str(strS, temp_nozzle_temp)) {
|
||||||
std::cout << "invalid nozzle temperature comment with invalid value!" << std::endl;
|
std::cout << "invalid nozzle temperature comment with invalid value!" << 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; // 跳过 'T'
|
||||||
|
for (size_t i = 0; i < strT.size(); i++) {
|
||||||
|
if (strT[i] == ' ') {
|
||||||
|
strT = strT.substr(0, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 +760,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;
|
||||||
@@ -607,6 +787,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) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
namespace QIDIStudio {
|
namespace QIDIStudio {
|
||||||
|
|
||||||
@@ -109,12 +110,14 @@ 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);
|
||||||
|
|
||||||
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,
|
||||||
@@ -167,7 +170,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++) {
|
||||||
@@ -213,10 +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 is_wipe_tower = false;
|
||||||
|
bool is_multi_nozzle = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
src/libslic3r/PresetBundle.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/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
|
||||||
@@ -16,6 +21,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,10 +42,14 @@ 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
|
||||||
@@ -70,9 +83,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
|
||||||
@@ -95,6 +112,7 @@ 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 +124,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
|
||||||
@@ -121,6 +140,7 @@ 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,7 +160,9 @@ 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
|
||||||
@@ -163,4 +185,7 @@ 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/FilamentMapDialog.cpp
|
||||||
|
src/slic3r/GUI/FilamentGroupPopup.cpp
|
||||||
|
src/slic3r/GUI/FilamentMapPanel.cpp
|
||||||
|
|||||||
16482
qdt/i18n/pl/QIDIStudio_pl.po
Normal file
BIN
readmeRes/UI.png
Normal file
|
After Width: | Height: | Size: 385 KiB |
BIN
readmeRes/qidilink.png
Normal file
|
After Width: | Height: | Size: 502 KiB |
@@ -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?
|
||||||
|
|||||||
329
resources/flush/flush_data_dual_highflow.txt
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
colors
|
||||||
|
#000000 #FFFFFF #545454 #8E9089 #C12E1F #F4EE2A #0086D6 #F7E6DE #00AE42 #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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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
|
||||||
|
#00AE42 #000000 120
|
||||||
|
#00AE42 #FFFFFF 690
|
||||||
|
#00AE42 #545454 330
|
||||||
|
#00AE42 #8E9089 330
|
||||||
|
#00AE42 #C12E1F 270
|
||||||
|
#00AE42 #F4EE2A 480
|
||||||
|
#00AE42 #0086D6 750
|
||||||
|
#00AE42 #F7E6DE 900
|
||||||
|
#00AE42 #5E43B7 450
|
||||||
|
#00AE42 #482960 210
|
||||||
|
#00AE42 #0056B8 240
|
||||||
|
#00AE42 #FEC600 420
|
||||||
|
#00AE42 #F5547C 390
|
||||||
|
#00AE42 #6F5034 210
|
||||||
|
#00AE42 #FF9016 420
|
||||||
|
#00AE42 #00B1B7 390
|
||||||
|
#00AE42 #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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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
|
||||||
338
resources/flush/flush_data_dual_standard.txt
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
colors
|
||||||
|
#000000 #FFFFFF #545454 #8E9089 #C12E1F #F4EE2A #0086D6 #F7E6DE #00AE42 #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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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
|
||||||
|
#00AE42 #000000 150
|
||||||
|
#00AE42 #FFFFFF 900
|
||||||
|
#00AE42 #545454 240
|
||||||
|
#00AE42 #8E9089 330
|
||||||
|
#00AE42 #C12E1F 210
|
||||||
|
#00AE42 #F4EE2A 270
|
||||||
|
#00AE42 #F7E6DE 360
|
||||||
|
#00AE42 #5E43B7 180
|
||||||
|
#00AE42 #482960 180
|
||||||
|
#00AE42 #0056B8 240
|
||||||
|
#00AE42 #FEC600 300
|
||||||
|
#00AE42 #EC008C 300
|
||||||
|
#00AE42 #F5547C 390
|
||||||
|
#00AE42 #6F5034 180
|
||||||
|
#00AE42 #FF9016 300
|
||||||
|
#00AE42 #00B1B7 360
|
||||||
|
#00AE42 #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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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 #00AE42 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
|
||||||
61
resources/flush/flush_data_standard.txt
Normal 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
|
||||||
BIN
resources/fonts/NanumGothic-Bold.ttf
Normal file
BIN
resources/fonts/NanumGothic-Regular.ttf
Normal file
BIN
resources/fonts/SourceHanSansJP-Bold.otf
Normal file
BIN
resources/fonts/SourceHanSansJP-Normal.otf
Normal file
BIN
resources/i18n/pl/QIDIStudio.mo
Normal file
3
resources/images/L.svg
Normal 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 |
1
resources/images/QIDIStudioBlack.svg
Normal 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 |
3
resources/images/R.svg
Normal 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 |
1
resources/images/add_text_modifier.svg
Normal 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 |
1
resources/images/add_text_negative.svg
Normal 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 |
1
resources/images/add_text_part.svg
Normal 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 |
3
resources/images/advanced_option1.svg
Normal 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 |
3
resources/images/advanced_option1_disable.svg
Normal 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 |
3
resources/images/advanced_option2.svg
Normal 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 |
3
resources/images/advanced_option3.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M12.9742 9.65669C13.2353 9.91782 13.2353 10.3401 12.9742 10.5984L7.64038 15.935C7.37924 16.1961 6.95698 16.1961 6.69863 15.935C6.44027 15.6739 6.43749 15.2516 6.69863 14.9933L11.5602 10.1317L6.69585 5.26742C6.43472 5.00628 6.43472 4.58403 6.69585 4.32567C6.95698 4.06731 7.37924 4.06454 7.6376 4.32567L12.9742 9.65669Z" fill="#4479fb"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 449 B |
3
resources/images/advanced_option4.svg
Normal 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 d="M10.5084 13.1962C10.2472 13.4574 9.82496 13.4574 9.5666 13.1962L4.23003 7.86242C3.9689 7.60129 3.9689 7.17903 4.23003 6.92068C4.49116 6.66232 4.91342 6.65954 5.17178 6.92068L10.0333 11.7822L14.8976 6.9179C15.1588 6.65676 15.581 6.65676 15.8394 6.9179C16.0977 7.17903 16.1005 7.60129 15.8394 7.85965L10.5084 13.1962Z" fill="#4479fb"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 446 B |
@@ -1,3 +1,3 @@
|
|||||||
<svg width="26" height="11" viewBox="0 0 26 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="26" height="11" viewBox="0 0 26 11" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M25.0877 5.97153C25.3595 5.69978 25.3595 5.2592 25.0877 4.98746L20.6594 0.55913C20.3877 0.287386 19.9471 0.287386 19.6753 0.55913C19.4036 0.830875 19.4036 1.27146 19.6753 1.5432L23.6116 5.47949L19.6753 9.41578C19.4036 9.68753 19.4036 10.1281 19.6753 10.3999C19.9471 10.6716 20.3877 10.6716 20.6594 10.3999L25.0877 5.97153ZM0.90332 6.17534H24.5957V4.78365H0.90332V6.17534Z" fill="#00AE42"/>
|
<path d="M25.0877 5.97153C25.3595 5.69978 25.3595 5.2592 25.0877 4.98746L20.6594 0.55913C20.3877 0.287386 19.9471 0.287386 19.6753 0.55913C19.4036 0.830875 19.4036 1.27146 19.6753 1.5432L23.6116 5.47949L19.6753 9.41578C19.4036 9.68753 19.4036 10.1281 19.6753 10.3999C19.9471 10.6716 20.3877 10.6716 20.6594 10.3999L25.0877 5.97153ZM0.90332 6.17534H24.5957V4.78365H0.90332V6.17534Z" fill="#4479fb"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 502 B After Width: | Height: | Size: 502 B |
@@ -1,4 +0,0 @@
|
|||||||
<svg width="13" height="15" viewBox="0 0 13 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.06444 9.28005L1.07547 11.3918L3.21526 11.4027L1.06444 9.28005ZM1.07569 9.28988L3.20445 11.3907L12.6065 2.11192L10.4777 0.011054L1.07569 9.28988Z" fill="white"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.05957 13.4785C1.05957 12.9262 1.50729 12.4785 2.05957 12.4785H12C12.5523 12.4785 13 12.9262 13 13.4785C13 14.0308 12.5523 14.4785 12 14.4785H2.05957C1.50729 14.4785 1.05957 14.0308 1.05957 13.4785Z" fill="white"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 582 B |
@@ -1,6 +1,21 @@
|
|||||||
<svg width="54" height="33" viewBox="0 0 54 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<rect width="50" height="30" rx="4.63896" fill="#EA4E38"/>
|
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
<path d="M0 19H50V25.361C50 27.9231 47.9231 30 45.361 30H4.63896C2.07693 30 0 27.9231 0 25.361V19Z" fill="#C041C2"/>
|
<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="M16.0526 4.96415C16.6934 4.96415 17.2649 5.08971 17.7672 5.34084C18.2781 5.59196 18.6764 5.94266 18.9622 6.39295C19.2479 6.83458 19.3908 7.34116 19.3908 7.91268C19.3908 8.4842 19.2479 8.9951 18.9622 9.44539C18.6851 9.88702 18.2911 10.2334 17.7801 10.4845C17.2779 10.727 16.7021 10.8482 16.0526 10.8482H14.2861V14.4722H13.1301V4.96415H16.0526ZM15.9097 9.83506C16.6371 9.83506 17.1956 9.65754 17.5853 9.30251C17.975 8.93881 18.1698 8.47554 18.1698 7.91268C18.1698 7.34982 17.975 6.88654 17.5853 6.52284C17.1956 6.15915 16.6371 5.9773 15.9097 5.9773H14.2861V9.83506H15.9097ZM20.8423 4.96415H21.9984V13.433H26.6874V14.4722H20.8423V4.96415ZM31.7844 4.96415L35.6032 14.4722H34.3173L33.2652 11.7445H29.3295L28.3293 14.4722H27.1603L30.8102 4.96415H31.7844ZM32.8625 10.7053L31.2519 6.50985L29.7192 10.7053H32.8625Z" fill="white"/>
|
viewBox="0 0 54 33" style="enable-background:new 0 0 54 33;" xml:space="preserve">
|
||||||
<path d="M21.3664 20.7625L24.0941 27.554H23.0086L22.3128 25.7355H19.5572L18.8892 27.554H17.8872L20.5129 20.7625H21.3664ZM21.9788 24.8634L20.9025 22.0614L19.882 24.8634H21.9788ZM25.0369 22.9057V21.913L27.0502 20.7532H27.8203V27.554H26.809V21.9037L25.0369 22.9057Z" fill="white"/>
|
<style type="text/css">
|
||||||
|
.st0{fill:#EA4E38;}
|
||||||
|
.st1{fill:#C041C2;}
|
||||||
|
.st2{fill:#FFFFFF;}
|
||||||
|
</style>
|
||||||
|
<path class="st0" d="M4.6,0h40.7C47.9,0,50,2.1,50,4.6v20.7c0,2.6-2.1,4.6-4.6,4.6H4.6C2.1,30,0,27.9,0,25.4V4.6C0,2.1,2.1,0,4.6,0z
|
||||||
|
"/>
|
||||||
|
<path class="st1" d="M0,19h50v6.4c0,2.6-2.1,4.6-4.6,4.6H4.6C2.1,30,0,27.9,0,25.4V19z"/>
|
||||||
|
<path class="st2" d="M16.1,5c0.6,0,1.2,0.1,1.7,0.4c0.5,0.3,0.9,0.6,1.2,1.1c0.3,0.4,0.4,0.9,0.4,1.5c0,0.6-0.1,1.1-0.4,1.5
|
||||||
|
c-0.3,0.4-0.7,0.8-1.2,1c-0.5,0.2-1.1,0.4-1.7,0.4h-1.8v3.6h-1.2V5H16.1z M15.9,9.8c0.7,0,1.3-0.2,1.7-0.5c0.4-0.4,0.6-0.8,0.6-1.4
|
||||||
|
s-0.2-1-0.6-1.4C17.2,6.2,16.6,6,15.9,6h-1.6v3.9H15.9z M20.8,5H22v8.5h4.7v1h-5.8V5z M31.8,5l3.8,9.5h-1.3l-1.1-2.7h-3.9l-1,2.7
|
||||||
|
h-1.2L30.8,5H31.8z M32.9,10.7l-1.6-4.2l-1.5,4.2H32.9z"/>
|
||||||
|
<g>
|
||||||
|
<path class="st2" d="M18.7,22.9v-1l2-1.2h0.8v6.8h-1v-5.7L18.7,22.9z"/>
|
||||||
|
<path class="st2" d="M26.8,20.8l2.7,6.8h-1.1l-0.7-1.8h-2.8l-0.7,1.8h-1l2.6-6.8H26.8z M27.4,24.9L26.3,22l-1,2.8H27.4z"/>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,6 +0,0 @@
|
|||||||
<svg width="54" height="33" viewBox="0 0 54 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<rect width="50" height="30" rx="4.63896" fill="#EA4E38"/>
|
|
||||||
<path d="M0 19H50V25.361C50 27.9231 47.9231 30 45.361 30H4.63896C2.07693 30 0 27.9231 0 25.361V19Z" fill="#C041C2"/>
|
|
||||||
<path d="M16.0526 4.96415C16.6934 4.96415 17.2649 5.08971 17.7672 5.34084C18.2781 5.59196 18.6764 5.94266 18.9622 6.39295C19.2479 6.83458 19.3908 7.34116 19.3908 7.91268C19.3908 8.4842 19.2479 8.9951 18.9622 9.44539C18.6851 9.88702 18.2911 10.2334 17.7801 10.4845C17.2779 10.727 16.7021 10.8482 16.0526 10.8482H14.2861V14.4722H13.1301V4.96415H16.0526ZM15.9097 9.83506C16.6371 9.83506 17.1956 9.65754 17.5853 9.30251C17.975 8.93881 18.1698 8.47554 18.1698 7.91268C18.1698 7.34982 17.975 6.88654 17.5853 6.52284C17.1956 6.15915 16.6371 5.9773 15.9097 5.9773H14.2861V9.83506H15.9097ZM20.8423 4.96415H21.9984V13.433H26.6874V14.4722H20.8423V4.96415ZM31.7844 4.96415L35.6032 14.4722H34.3173L33.2652 11.7445H29.3295L28.3293 14.4722H27.1603L30.8102 4.96415H31.7844ZM32.8625 10.7053L31.2519 6.50985L29.7192 10.7053H32.8625Z" fill="white"/>
|
|
||||||
<path d="M21.3664 20.7625L24.0941 27.554H23.0086L22.3128 25.7355H19.5572L18.8892 27.554H17.8872L20.5129 20.7625H21.3664ZM21.9788 24.8634L20.9025 22.0614L19.882 24.8634H21.9788ZM25.0369 22.9057V21.913L27.0502 20.7532H27.8203V27.554H26.809V21.9037L25.0369 22.9057Z" fill="white"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB |
20
resources/images/ams_mapping_container_1.svg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<svg width="74" height="82" viewBox="0 0 74 82" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_21731_45418)">
|
||||||
|
<mask id="mask0_21731_45418" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="4" width="74" height="78">
|
||||||
|
<path d="M74 4H0V82H74V4Z" fill="white"/>
|
||||||
|
</mask>
|
||||||
|
<g mask="url(#mask0_21731_45418)">
|
||||||
|
</g>
|
||||||
|
<mask id="mask1_21731_45418" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="74" height="82">
|
||||||
|
<path d="M74 0H0V82H74V0Z" fill="white"/>
|
||||||
|
</mask>
|
||||||
|
<g mask="url(#mask1_21731_45418)">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.8 0.152344C1.3 0.152344 0 1.25439 0 2.55681V79.7479C0 81.0503 1.3 82.1523 2.8 82.1523H71.2C72.7 82.1523 74 81.0503 74 79.7479L74 2.55681C74 1.25439 72.7 0.152344 71.2 0.152344H2.8ZM4.2 1.35458C2.7 1.35458 1.4 2.45662 1.4 3.75904L1.4 62.9173C1.4 64.2197 2.7 65.3216 4.2 65.3216H69.8C71.3 65.3216 72.6 64.2197 72.6 62.9173L72.6 3.75904C72.6 2.45662 71.3 1.35458 69.8 1.35458H4.2Z" fill="#AAAAAA"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_21731_45418">
|
||||||
|
<rect width="74" height="82" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
3
resources/images/ams_mapping_container_4.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="230" height="82" viewBox="0 0 230 82" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.80488 0C1.25579 0 0 1.07452 0 2.4V79.6C0 80.9254 1.25579 82 2.80488 82H227.195C228.744 82 230 80.9254 230 79.6V2.4C230 1.07452 228.744 0 227.195 0H2.80488ZM4.20732 1.2C2.65822 1.2 1.40244 2.27452 1.40244 3.6V62.8C1.40244 64.1254 2.65822 65.2 4.20732 65.2H225.793C227.342 65.2 228.598 64.1254 228.598 62.8V3.6C228.598 2.27452 227.342 1.2 225.793 1.2H4.20732Z" fill="#AAAAAA"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 533 B |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 8.8 KiB |
14
resources/images/ams_rfid_0.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29362">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29362)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m22.2754,10.1387c0.9615,1.439 1.4747,3.1307 1.4747,4.8613l-2.49,0c-0.219,0 -0.3396,0.2544 -0.201,0.4239l3.5682,4.3626c0.1039,0.127 0.2981,0.127 0.4019,0l3.5682,-4.3626c0.1387,-0.1695 0.0181,-0.4239 -0.2009,-0.4239l-2.3965,0c0,-0.5037 -0.0346,-1.0048 -0.1027,-1.5c-0.2263,-1.6434 -0.8223,-3.2212 -1.7511,-4.61127c-1.2087,-1.80894 -2.9267,-3.21884 -4.9367,-4.0514c-2.01,-0.83256 -4.2217,-1.0504 -6.3555,-0.62596c-2.1338,0.42443 -4.09379,1.47208 -5.63217,3.01046c-1.53838,1.53838 -2.58603,3.49837 -3.01046,5.63217c-0.42444,2.1338 -0.2066,4.3455 0.62596,6.3555c0.83256,2.01 2.24246,3.728 4.0514,4.9367c1.39007,0.9288 2.96787,1.5248 4.61127,1.7511c0.4952,0.0681 0.9963,0.1027 1.5,0.1027l0,-0.7499l0,-0.7501l0,-0.7499c-1.7306,0 -3.4223,-0.5132 -4.8613,-1.4747c-1.43891,-0.9615 -2.56043,-2.328 -3.2227,-3.9269c-0.66227,-1.5989 -0.83555,-3.3582 -0.49793,-5.0555c0.33762,-1.6974 1.17099,-3.2565 2.3947,-4.48023c1.22373,-1.22371 2.78283,-2.05708 4.48023,-2.3947c1.6973,-0.33762 3.4566,-0.16434 5.0555,0.49793c1.5989,0.66227 2.9654,1.78379 3.9269,3.2227z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
14
resources/images/ams_rfid_1.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29437">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29437)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m22.7973,22.759l1.6843,1.6843c0.1549,0.1549 0.0602,0.42 -0.1577,0.4418l-5.6079,0.5617c-0.1632,0.0164 -0.3005,-0.1209 -0.2842,-0.2841l0.5617,-5.608c0.0219,-0.2178 0.287,-0.3124 0.4419,-0.1576l1.7709,1.771c1.2133,-1.2209 2.0398,-2.7726 2.3756,-4.461c0.3377,-1.6974 0.1644,-3.4567 -0.4979,-5.0556c-0.6623,-1.5989 -1.7838,-2.96544 -3.2227,-3.92691c-1.439,-0.96147 -3.1307,-1.47465 -4.8613,-1.47465c-1.7306,0 -3.4223,0.51318 -4.8613,1.47465c-1.43891,0.96147 -2.56043,2.32801 -3.2227,3.92691c-0.66227,1.5989 -0.83555,3.3582 -0.49793,5.0556c0.33762,1.6973 1.17099,3.2564 2.3947,4.4801l-0.53028,0.5303l-0.53038,0.5304l-0.53028,0.5303c-0.35619,-0.3562 -0.68608,-0.735 -0.98801,-1.1333c-1.0021,-1.3221 -1.69629,-2.8592 -2.02245,-4.4989c-0.42444,-2.1338 -0.2066,-4.3455 0.62596,-6.3555c0.83256,-2.01001 2.24246,-3.72797 4.0514,-4.93667c1.80897,-1.20869 3.93567,-1.85383 6.11127,-1.85383c2.1756,0 4.3023,0.64514 6.1113,1.85383c1.8089,1.2087 3.2188,2.92666 4.0514,4.93667c0.8325,2.01 1.0504,4.2217 0.6259,6.3555c-0.3261,1.6397 -1.0203,3.1768 -2.0224,4.4989c-0.2965,0.3912 -0.62,0.7635 -0.9689,1.1141z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
14
resources/images/ams_rfid_2.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29465">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29465)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m19.8613,22.2754c-1.439,0.9615 -3.1307,1.4747 -4.8613,1.4747l0,-2.3962c0,-0.219 -0.2544,-0.3396 -0.4239,-0.201l-4.3626,3.5682c-0.127,0.1039 -0.127,0.2981 0,0.4019l4.3626,3.5682c0.1695,0.1387 0.4239,0.0181 0.4239,-0.2009l0,-2.4903c0.5037,0 1.0048,-0.0346 1.5,-0.1027c1.6434,-0.2263 3.2212,-0.8223 4.6113,-1.7511c1.8089,-1.2087 3.2188,-2.9267 4.0514,-4.9367c0.8325,-2.01 1.0504,-4.2217 0.6259,-6.3555c-0.4244,-2.1338 -1.472,-4.09379 -3.0104,-5.63217c-1.5384,-1.53838 -3.4984,-2.58603 -5.6322,-3.01046c-2.1338,-0.42444 -4.3455,-0.2066 -6.3555,0.62596c-2.01001,0.83256 -3.72797,2.24246 -4.93667,4.0514c-0.92883,1.39007 -1.52487,2.96787 -1.75109,4.61127c-0.06815,0.4952 -0.10274,0.9963 -0.10274,1.5l0.74993,0l0.75007,0l0.74993,0c0,-1.7306 0.51319,-3.4223 1.47466,-4.8613c0.96147,-1.43891 2.32801,-2.56043 3.92691,-3.2227c1.5989,-0.66227 3.3582,-0.83555 5.0556,-0.49793c1.6973,0.33762 3.2564,1.17099 4.4801,2.39471c1.2237,1.22372 2.0571,2.78282 2.3947,4.48022c0.3377,1.6973 0.1644,3.4566 -0.4979,5.0555c-0.6623,1.5989 -1.7838,2.9654 -3.2227,3.9269z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
14
resources/images/ams_rfid_3.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29471">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29471)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m7.26862,22.8248l-1.70224,1.7022c-0.15485,0.1549 -0.42002,0.0603 -0.4418,-0.1577l-0.56172,-5.6079c-0.01641,-0.1632 0.12091,-0.3005 0.28418,-0.2842l5.60796,0.5617c0.2178,0.0219 0.3124,0.2871 0.1576,0.4419l-1.753,1.753c1.2165,1.1983 2.7575,2.0148 4.4333,2.3481c1.6973,0.3377 3.4567,0.1644 5.0555,-0.4979c1.5989,-0.6623 2.9655,-1.7838 3.9269,-3.2227c0.9615,-1.439 1.4747,-3.1307 1.4747,-4.8613c0,-1.7306 -0.5132,-3.4223 -1.4747,-4.8613c-0.9614,-1.43891 -2.328,-2.56043 -3.9269,-3.2227c-1.5988,-0.66227 -3.3582,-0.83555 -5.0555,-0.49793c-1.6974,0.33762 -3.2565,1.17099 -4.4802,2.3947l-0.53029,-0.53028l-0.53037,-0.53038l-0.53029,-0.53028c0.35619,-0.35619 0.73499,-0.68608 1.13331,-0.98801c1.32202,-1.0021 2.85914,-1.69629 4.49884,-2.02245c2.1338,-0.42444 4.3456,-0.2066 6.3555,0.62596c2.01,0.83256 3.728,2.24246 4.9367,4.0514c1.2087,1.80897 1.8538,3.93567 1.8538,6.11127c0,2.1756 -0.6451,4.3023 -1.8538,6.1113c-1.2087,1.8089 -2.9267,3.2188 -4.9367,4.0514c-2.0099,0.8325 -4.2217,1.0504 -6.3555,0.6259c-1.6397,-0.3261 -3.17682,-1.0203 -4.49884,-2.0224c-0.3809,-0.2887 -0.74394,-0.603 -1.08644,-0.9414z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
14
resources/images/ams_rfid_4.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29432">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29432)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m7.72445,19.8613c-0.96147,-1.439 -1.47465,-3.1307 -1.47465,-4.8613l2.55489,0c0.219,0 0.3396,-0.2544 0.201,-0.4239l-3.5682,-4.3626c-0.1039,-0.127 -0.2981,-0.127 -0.4019,0l-3.5682,4.3626c-0.1387,0.1695 -0.0181,0.4239 0.2009,0.4239l2.33157,0c0,0.5037 0.03459,1.0048 0.10275,1.5c0.22621,1.6434 0.82225,3.2212 1.75109,4.6113c1.20869,1.8089 2.92666,3.2188 4.9366,4.0514c2.01,0.8325 4.2218,1.0504 6.3556,0.6259c2.1337,-0.4244 4.0938,-1.472 5.6321,-3.0104c1.5384,-1.5384 2.5861,-3.4984 3.0105,-5.6322c0.4244,-2.1338 0.2066,-4.3455 -0.626,-6.3555c-0.8325,-2.01001 -2.2424,-3.72797 -4.0514,-4.93667c-1.3901,-0.92883 -2.9678,-1.52487 -4.6112,-1.75109c-0.4952,-0.06815 -0.9963,-0.10274 -1.5,-0.10274l0,0.74993l0,0.75007l0,0.74993c1.7306,0 3.4223,0.51319 4.8612,1.47466c1.439,0.96147 2.5605,2.32801 3.2228,3.92691c0.6622,1.5989 0.8355,3.3582 0.4979,5.0556c-0.3376,1.6973 -1.171,3.2564 -2.3947,4.4801c-1.2237,1.2237 -2.7828,2.0571 -4.4802,2.3947c-1.6973,0.3377 -3.4567,0.1644 -5.0555,-0.4979c-1.5989,-0.6623 -2.96548,-1.7838 -3.92695,-3.2227z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
14
resources/images/ams_rfid_5.svg
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<svg width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none">
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_7112_29427">
|
||||||
|
<rect id="svg_1" fill="white" height="30" width="30"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<g id="svg_2" clip-path="url(#clip0_7112_29427)">
|
||||||
|
<path id="svg_3" stroke="black" d="m31.1539,-1.15234l-32.30771,0l0,32.30764l32.30771,0l0,-32.30764z"/>
|
||||||
|
<path id="svg_4" fill="#6B6B6B" d="m11.4427,4.81286c0.0164,-0.16327 -0.121,-0.30059 -0.2842,-0.28418l-5.60789,0.56172c-0.21793,0.02178 -0.31254,0.28695 -0.15769,0.4418l1.75906,1.75906c-0.32956,0.33556 -0.63606,0.69067 -0.91816,1.06283c-1.0021,1.32201 -1.69629,2.85911 -2.02245,4.49891c-0.42444,2.1337 -0.2066,4.3455 0.62596,6.3555c0.83256,2.01 2.24246,3.7279 4.0514,4.9366c1.80897,1.2087 3.93567,1.8539 6.11127,1.8539c2.1756,0 4.3023,-0.6452 6.1113,-1.8539c1.8089,-1.2087 3.2188,-2.9266 4.0514,-4.9366c0.8325,-2.01 1.0504,-4.2218 0.6259,-6.3555c-0.3261,-1.6398 -1.0203,-3.1769 -2.0224,-4.49891c-0.3019,-0.39833 -0.6318,-0.77712 -0.988,-1.13331l-0.5303,0.53028l-0.5304,0.53038l-0.5303,0.53028c1.2238,1.22368 2.0571,2.78288 2.3947,4.48018c0.3377,1.6973 0.1644,3.4567 -0.4979,5.0556c-0.6623,1.5988 -1.7838,2.9654 -3.2227,3.9269c-1.439,0.9614 -3.1307,1.4746 -4.8613,1.4746c-1.7306,0 -3.4223,-0.5132 -4.8613,-1.4746c-1.43891,-0.9615 -2.56043,-2.3281 -3.2227,-3.9269c-0.66227,-1.5989 -0.83555,-3.3583 -0.49793,-5.0556c0.33117,-1.6649 1.1393,-3.1968 2.32494,-4.40961l1.69609,1.69611c0.1549,0.1549 0.42,0.0602 0.4419,-0.1576l0.5617,-5.60794z" clip-rule="evenodd" fill-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |