Compare commits
40 Commits
V1.9.5.51
...
V1.10.02.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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/
|
||||
**/machine_full/
|
||||
**/filament_full/
|
||||
.idea/
|
||||
|
||||
@@ -84,17 +84,26 @@ fi
|
||||
|
||||
DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release)
|
||||
VERSION=$(awk -F= '/^VERSION_ID=/ {print $2}' /etc/os-release)
|
||||
# treat ubuntu as debian
|
||||
if [ "${DISTRIBUTION}" == "ubuntu" ]
|
||||
then
|
||||
DISTRIBUTION="debian"
|
||||
fi
|
||||
if [ ! -f ./linux.d/${DISTRIBUTION} ]
|
||||
# OSLIKE is a space-delineated list of similar distributions
|
||||
OSLIKE=$(awk -F= '/^ID_LIKE=/ {print $2}' /etc/os-release | tr -d '"')
|
||||
|
||||
# Iterate over a list of candidate distribution targets, first match is used
|
||||
for CANDIDATE in ${DISTRIBUTION} ${OSLIKE}; do
|
||||
if [ -f ./linux.d/${CANDIDATE} ]
|
||||
then
|
||||
TARGET_DISTRO="${CANDIDATE}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z ${TARGET_DISTRO} ]
|
||||
then
|
||||
echo "Your distribution does not appear to be currently supported by these build scripts"
|
||||
exit 1
|
||||
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}"
|
||||
if [[ -z "${FOUND_GTK3_DEV}" ]]
|
||||
@@ -119,7 +128,7 @@ fi
|
||||
if ! [[ -n "${DISABLE_PARALLEL_LIMIT}" ]]
|
||||
then
|
||||
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
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=1
|
||||
else
|
||||
|
||||
@@ -42,6 +42,7 @@ set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux")
|
||||
|
||||
set(IS_CROSS_COMPILE FALSE)
|
||||
|
||||
set(FLATPAK FALSE CACHE BOOL "Not copy FFMPEG file")
|
||||
|
||||
if (APPLE)
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
@@ -54,6 +55,8 @@ if (APPLE)
|
||||
set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks)
|
||||
endif()
|
||||
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 ()
|
||||
|
||||
# Proposal for C++ unit tests and sandboxes
|
||||
@@ -167,6 +170,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
# WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory.
|
||||
# We pick it from environment if it is not defined in another way
|
||||
if(WIN32)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
if(NOT DEFINED WIN10SDK_PATH)
|
||||
if(DEFINED ENV{WIN10SDK_PATH})
|
||||
set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}")
|
||||
@@ -619,6 +623,10 @@ function(qidistudio_copy_dlls target config postfix output_dlls)
|
||||
${CMAKE_PREFIX_PATH}/bin/occt/TKXDESTEP.dll
|
||||
${CMAKE_PREFIX_PATH}/bin/occt/TKXSBase.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})
|
||||
|
||||
set(${output_dlls}
|
||||
@@ -654,11 +662,50 @@ function(qidistudio_copy_dlls target config postfix output_dlls)
|
||||
${_out_dir}/TKXSBase.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
|
||||
)
|
||||
|
||||
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.
|
||||
add_subdirectory(src)
|
||||
@@ -714,4 +761,18 @@ else ()
|
||||
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
|
||||
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)
|
||||
|
||||
@@ -9,7 +9,7 @@ set -x
|
||||
# the simplicity of a single Docker image and a one-time compilation
|
||||
# seems better.
|
||||
docker build -t qidistudio \
|
||||
--build-arg USER=$USER \
|
||||
--build-arg USER=${USER:-root} \
|
||||
--build-arg UID=$(id -u) \
|
||||
--build-arg GID=$(id -g) \
|
||||
$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 \
|
||||
# If there's problems with the X display, try this
|
||||
# -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 \
|
||||
`# Use the hosts networking. Printer wifi and also dbus communication` \
|
||||
--net=host \
|
||||
`# Some X installs will not have permissions to talk to sockets for shared memory` \
|
||||
--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` \
|
||||
-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` \
|
||||
-e DISPLAY=$DISPLAY \
|
||||
`# It seems that libGL and dbus things need privileged mode` \
|
||||
@@ -24,4 +33,3 @@ docker run \
|
||||
--rm \
|
||||
`# Pass all parameters from this script to the qidi ENTRYPOINT binary` \
|
||||
qidistudio $*
|
||||
|
||||
|
||||
69
Dockerfile
@@ -1,5 +1,4 @@
|
||||
FROM docker.io/ubuntu:22.04
|
||||
LABEL maintainer "DeftDawg <DeftDawg@gmail.com>"
|
||||
FROM docker.io/ubuntu:24.10
|
||||
|
||||
# Disable interactive package configuration
|
||||
RUN apt-get update && \
|
||||
@@ -14,6 +13,7 @@ RUN apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
cmake \
|
||||
curl \
|
||||
xvfb \
|
||||
eglexternalplatform-dev \
|
||||
extra-cmake-modules \
|
||||
file \
|
||||
@@ -39,7 +39,6 @@ RUN apt-get update && apt-get install -y \
|
||||
libssl-dev \
|
||||
libudev-dev \
|
||||
libwayland-dev \
|
||||
libwebkit2gtk-4.0-dev \
|
||||
libxkbcommon-dev \
|
||||
locales \
|
||||
locales-all \
|
||||
@@ -47,6 +46,7 @@ RUN apt-get update && apt-get install -y \
|
||||
pkgconf \
|
||||
sudo \
|
||||
wayland-protocols \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
wget
|
||||
|
||||
# Change your locale here if you want. See the output
|
||||
@@ -58,14 +58,52 @@ RUN locale-gen $LC_ALL
|
||||
# the CA cert path on every startup
|
||||
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
|
||||
# Update System dependencies
|
||||
WORKDIR /QIDIStudio
|
||||
|
||||
# Ubuntu 24 Docker Image now come with default standard user "ubuntu"
|
||||
# It might conflict with your mapped user, remove if user ubuntu exist
|
||||
RUN if id "ubuntu" >/dev/null 2>&1; then userdel -r ubuntu; fi
|
||||
|
||||
|
||||
# Use bash as the shell
|
||||
|
||||
# Set ARG values
|
||||
# If user was passed from build it will create a user same
|
||||
# as your workstation. Else it will use /root
|
||||
|
||||
# Setting ARG at build time is convienient for testing purposes
|
||||
# otherwise the same commands will be executed at runtime
|
||||
|
||||
ARG USER=root
|
||||
ARG UID=0
|
||||
ARG GID=0
|
||||
RUN if [ "$UID" != "0" ]; then \
|
||||
groupadd -g $GID $USER && \
|
||||
useradd -u $UID -g $GID -m -d /home/$USER $USER && \
|
||||
mkdir -p /home/$USER && \
|
||||
chown -R $UID:$GID /QIDIStudio && \
|
||||
usermod -aG sudo $USER && \
|
||||
passwd -d "$USER"; \
|
||||
else \
|
||||
mkdir -p /root/.config; \
|
||||
fi
|
||||
|
||||
# Allow password-less sudo for ALL users
|
||||
RUN echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/999-passwordless
|
||||
RUN chmod 440 /etc/sudoers.d/999-passwordless
|
||||
|
||||
# Update System dependencies(Run before user switch)
|
||||
RUN ./BuildLinux.sh -u
|
||||
|
||||
# Run 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
|
||||
RUN ./BuildLinux.sh -d
|
||||
|
||||
@@ -73,7 +111,7 @@ RUN ./BuildLinux.sh -d
|
||||
RUN ./BuildLinux.sh -s
|
||||
|
||||
# Build AppImage
|
||||
ENV container podman
|
||||
ENV container=podman
|
||||
RUN ./BuildLinux.sh -i
|
||||
|
||||
# It's easier to run QIDI Studio as the same username,
|
||||
@@ -82,13 +120,14 @@ RUN ./BuildLinux.sh -i
|
||||
# to keep permissions the same. Just in case, defaults
|
||||
# are root.
|
||||
SHELL ["/bin/bash", "-l", "-c"]
|
||||
ARG USER=root
|
||||
ARG UID=0
|
||||
ARG GID=0
|
||||
RUN [[ "$UID" != "0" ]] \
|
||||
&& groupadd -f -g $GID $USER \
|
||||
&& useradd -u $UID -g $GID $USER
|
||||
|
||||
# Point FFMPEG Library search to the binary built upon QIDIStudio build time
|
||||
ENV LD_LIBRARY_PATH=/QIDIStudio/build/package/bin
|
||||
|
||||
# Using an entrypoint instead of CMD because the binary
|
||||
# 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 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.
|
||||
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.
|
||||
|
||||
### 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 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.
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>${MACOSX_BUNDLE_ICON_FILE}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.qidilab.qidi-studio</string>
|
||||
<string>com.qiditech.qidi-studio</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
@@ -129,5 +129,10 @@
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
2
deps/Boost/0001-Boost-fix.patch
vendored
@@ -1,5 +1,5 @@
|
||||
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
|
||||
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(
|
||||
dep_Boost
|
||||
#URL "https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.zip"
|
||||
URL "https://github.com/qidilab/boost/releases/download/1.78.0/boost_1_78_0.zip"
|
||||
URL "https://github.com/qiditech/boost/releases/download/1.78.0/boost_1_78_0.zip"
|
||||
URL_HASH SHA256=f22143b5528e081123c3c5ed437e92f648fe69748e95fa6e2bd41484e2986cc3
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost
|
||||
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_FREETYPE "Compile freetype" 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(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH "Path for downloaded source packages.")
|
||||
@@ -229,6 +230,11 @@ if (DEP_BUILD_FREETYPE)
|
||||
endif ()
|
||||
include(OCCT/OCCT.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
|
||||
${BOOST_PKG}
|
||||
@@ -247,6 +253,7 @@ set(_dep_list
|
||||
${ZLIB_PKG}
|
||||
${EXPAT_PKG}
|
||||
${FREETYPE_PKG}
|
||||
${FFMPEG_PKG}
|
||||
)
|
||||
|
||||
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/qiditech/ffmpeg_prebuilts/releases/download/7.0.2/7.0.2_msvc.zip
|
||||
URL_HASH SHA256=DF44AE6B97CE84C720695AE7F151B4A9654915D1841C68F10D62A1189E0E7181
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND
|
||||
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/bin"
|
||||
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/lib"
|
||||
# COMMAND ${CMAKE_COMMAND} -E make_directory "${_dstdir}/include"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/bin" "${_dstdir}/bin"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/lib" "${_dstdir}/lib"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/include" "${_dstdir}/include"
|
||||
)
|
||||
|
||||
else ()
|
||||
set(_extra_cmd "--pkg-config-flags=\"--static\"")
|
||||
string(APPEND _extra_cmd "--extra-cflags=\"-I ${DESTDIR}/usr/local/include\"")
|
||||
string(APPEND _extra_cmd "--extra-ldflags=\"-I ${DESTDIR}/usr/local/lib\"")
|
||||
string(APPEND _extra_cmd "--extra-libs=\"-lpthread -lm\"")
|
||||
string(APPEND _extra_cmd "--ld=\"g++\"")
|
||||
string(APPEND _extra_cmd "--bindir=\"${DESTDIR}/usr/local/bin\"")
|
||||
string(APPEND _extra_cmd "--enable-gpl")
|
||||
string(APPEND _extra_cmd "--enable-nonfree")
|
||||
|
||||
|
||||
ExternalProject_Add(dep_FFMPEG
|
||||
URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.2.tar.gz
|
||||
URL_HASH SHA256=5EB46D18D664A0CCADF7B0ADEE03BD3B7FA72893D667F36C69E202A807E6D533
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG
|
||||
CONFIGURE_COMMAND ${_conf_cmd}
|
||||
"--prefix=${DESTDIR}/usr/local"
|
||||
"--enable-shared"
|
||||
"--disable-doc"
|
||||
"--enable-small"
|
||||
"--disable-outdevs"
|
||||
"--disable-filters"
|
||||
"--enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test*"
|
||||
"--disable-protocols"
|
||||
"--enable-protocol=file,fd,pipe,rtp,udp"
|
||||
"--disable-muxers"
|
||||
"--enable-muxer=rtp"
|
||||
"--disable-encoders"
|
||||
"--disable-decoders"
|
||||
"--enable-decoder=*aac*,h264*,mp3*,mjpeg,rv*"
|
||||
"--disable-demuxers"
|
||||
"--enable-demuxer=h264,mp3,mov"
|
||||
"--disable-zlib"
|
||||
"--disable-avdevice"
|
||||
BUILD_IN_SOURCE ON
|
||||
BUILD_COMMAND make -j
|
||||
INSTALL_COMMAND make install
|
||||
)
|
||||
|
||||
endif()
|
||||
2
deps/GMP/GMP.cmake
vendored
@@ -43,7 +43,7 @@ else ()
|
||||
endif ()
|
||||
|
||||
ExternalProject_Add(dep_GMP
|
||||
URL https://github.com/qidilab/gmp/archive/refs/tags/6.2.1.tar.gz
|
||||
URL https://github.com/qiditech/gmp/archive/refs/tags/6.2.1.tar.gz
|
||||
URL_HASH SHA256=705ae57ee2014b2c6fc0f572c85ee43276b99b6b256ee16c1a9d3a8c4e3609d5
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP
|
||||
BUILD_IN_SOURCE ON
|
||||
|
||||
2
deps/wxWidgets/wxWidgets.cmake
vendored
@@ -23,7 +23,7 @@ endif ()
|
||||
# endif ()
|
||||
|
||||
qidistudio_add_cmake_project(wxWidgets
|
||||
GIT_REPOSITORY "https://github.com/bambulab/wxWidgets"
|
||||
GIT_REPOSITORY "https://github.com/qiditech/wxWidgets"
|
||||
GIT_TAG master
|
||||
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${TIFF_PKG} ${JPEG_PKG}
|
||||
CMAKE_ARGS
|
||||
|
||||
@@ -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
|
||||
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"
|
||||
3. Apply your corrections to the translation
|
||||
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
|
||||
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"
|
||||
3. Select Translation Language (for example 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:
|
||||
- Rename the file to QIDIStudio_fr.po
|
||||
- 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.
|
||||
( 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
|
||||
|
||||
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:
|
||||
```
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
7. 支持匈牙利语
|
||||
8. 一些关键问题修复
|
||||
|
||||
详细信息请查看:https://github.com/qidilab/QIDIStudio/releases
|
||||
详细信息请查看:https://github.com/qiditech/QIDIStudio/releases
|
||||
|
||||
@@ -15,4 +15,4 @@
|
||||
7. Added Magyar translations
|
||||
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
|
||||
libfuse2
|
||||
texinfo
|
||||
nasm
|
||||
yasm
|
||||
libx264-dev
|
||||
)
|
||||
|
||||
if [[ -n "$UPDATE_LIB" ]]
|
||||
then
|
||||
# for ubuntu 22+ and 23+:
|
||||
ubu_major_version="$(grep VERSION_ID /etc/os-release | cut -d "=" -f 2 | cut -d "." -f 1 | tr -d /\"/)"
|
||||
if [ $ubu_major_version == "22" ] || [ $ubu_major_version == "23" ]
|
||||
if [ $ubu_major_version = "22" ] || [ $ubu_major_version = "23" ]
|
||||
then
|
||||
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev curl libfuse-dev libssl-dev libcurl4-openssl-dev m4)
|
||||
elif [ $ubu_major_version == "24" ]
|
||||
elif [ $ubu_major_version = "24" ]
|
||||
then
|
||||
REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.1-dev)
|
||||
else
|
||||
@@ -56,4 +59,4 @@ then
|
||||
exit 0
|
||||
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
|
||||
libcurl-devel
|
||||
libquadmath-devel
|
||||
nasm
|
||||
yasm
|
||||
x264-devel
|
||||
)
|
||||
|
||||
if [[ -n "$UPDATE_LIB" ]]
|
||||
@@ -52,6 +55,8 @@ then
|
||||
done
|
||||
|
||||
if [ -n "${NEEDED_PKGS}" ]; then
|
||||
sudo dnf install -y https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
|
||||
sudo dnf -y update
|
||||
sudo dnf install -y ${NEEDED_PKGS}
|
||||
fi
|
||||
echo -e "done\n"
|
||||
|
||||
@@ -17,9 +17,12 @@ const std::string Extrusion_Role_Tag = " FEATURE: ";
|
||||
const std::string Width_Tag = " LINE_WIDTH: ";
|
||||
const std::string Wipe_Start_Tag = " WIPE_START";
|
||||
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 Height_Tag = " LAYER_HEIGHT: ";
|
||||
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_initial_layer_Tag = " nozzle_temperature_initial_layer";
|
||||
const std::string Z_HEIGHT_TAG = " Z_HEIGHT: ";
|
||||
@@ -130,6 +133,12 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
|
||||
m_wiping = true;
|
||||
} else if (starts_with(comment, Wipe_End_Tag)) {
|
||||
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)) {
|
||||
std::string str = comment.substr(Height_Tag.size());
|
||||
if (!parse_double_from_str(str, m_height)) {
|
||||
@@ -162,6 +171,11 @@ GCodeCheckResult GCodeChecker::parse_comment(GCodeLine& line)
|
||||
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)) {
|
||||
std::string str = comment.substr(nozzle_temperature_Tag.size() + 1);
|
||||
if (!parse_double_from_str(str, nozzle_temperature)) {
|
||||
@@ -232,6 +246,10 @@ GCodeCheckResult GCodeChecker::parse_command(GCodeLine& gcode_line)
|
||||
ret = parse_M104_M109(gcode_line);
|
||||
break;
|
||||
} // Set to nozzle temperature
|
||||
case 1020: {
|
||||
ret = parse_M1020(gcode_line);
|
||||
break;
|
||||
}
|
||||
default: { break; }
|
||||
}
|
||||
break;
|
||||
@@ -407,20 +425,31 @@ GCodeCheckResult GCodeChecker::parse_G92(GCodeLine& gcode_line)
|
||||
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);
|
||||
any_found = true;
|
||||
}
|
||||
|
||||
if (gcode_line.has(Y))
|
||||
if (gcode_line.has(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);
|
||||
any_found = true;
|
||||
}
|
||||
|
||||
if (gcode_line.has(E))
|
||||
if (gcode_line.has(E)){
|
||||
m_end_position[E] = gcode_line.get(E);
|
||||
any_found = true;
|
||||
}
|
||||
|
||||
for (unsigned char a = X; a <= E; ++a) {
|
||||
m_origin[a] = m_end_position[a];
|
||||
if (!any_found) {
|
||||
for (unsigned char a = X; a <= E; ++a) {
|
||||
m_origin[a] = m_end_position[a];
|
||||
}
|
||||
}
|
||||
|
||||
return GCodeCheckResult::Success;
|
||||
@@ -469,6 +498,46 @@ GCodeCheckResult GCodeChecker::parse_M104_M109(const GCodeLine &gcode_line)
|
||||
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,
|
||||
const std::array<double, 3>& target,
|
||||
double e, double height, bool is_bridge) const
|
||||
@@ -593,8 +662,21 @@ GCodeCheckResult GCodeChecker::check_G0_G1_width(const GCodeLine& line)
|
||||
std::array<double, 3> target = { m_end_position[X], m_end_position[Y], m_end_position[Z] };
|
||||
|
||||
bool is_bridge = m_role == erOverhangPerimeter || m_role == erBridgeInfill;
|
||||
if (!is_bridge) {
|
||||
double width_real = calculate_G1_width(source, target, delta_pos[E], m_height, is_bridge);
|
||||
if (!is_bridge && !is_wipe_tower) {
|
||||
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) {
|
||||
std::cout << "Invalid G0_G1 because has abnormal line width." << std::endl;
|
||||
std::cout << "Width: " << m_width << " Width_real: " << width_real << std::endl;
|
||||
|
||||
@@ -109,6 +109,7 @@ private:
|
||||
GCodeCheckResult parse_M82(const GCodeLine& gcode_line);
|
||||
GCodeCheckResult parse_M83(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);
|
||||
|
||||
@@ -167,7 +168,7 @@ public:
|
||||
std::string cmd=input;
|
||||
size_t read = 0;
|
||||
|
||||
while (cmd.size() >= 5)
|
||||
while (cmd.find(',') != std::string::npos)
|
||||
{
|
||||
int pt = 0;
|
||||
for (pt = 0; pt < cmd.size(); pt++) {
|
||||
@@ -217,6 +218,8 @@ private:
|
||||
std::vector<double> filament_flow_ratio;
|
||||
std::vector<double> nozzle_temperature;
|
||||
std::vector<double> nozzle_temperature_initial_layer;
|
||||
bool has_scarf_joint_seam = false;
|
||||
bool is_wipe_tower = false;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
17415
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]
|
||||
; 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]
|
||||
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]
|
||||
# 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]
|
||||
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?
|
||||
|
||||
61
resources/flush/flush_data.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
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/bind_device_ping_code_dark.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.346 0.361999H5.068V3.078H7.77V4.786H5.068V7.502H3.346V4.786H0.63V3.078H3.346V0.361999Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 214 B |
|
Before Width: | Height: | Size: 214 B After Width: | Height: | Size: 214 B |
3
resources/images/box_fila_sync.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 fill-rule="evenodd" clip-rule="evenodd" d="M3.10031 1.86719C2.27188 1.86719 1.60031 2.53877 1.60031 3.36719V9.01149C0.843171 9.08758 0.252106 9.72671 0.252106 10.5039V15.6221C0.252106 16.4506 0.923676 17.1221 1.7521 17.1221H9.05122C10.1743 18.3923 11.8161 19.1931 13.6449 19.1931C17.0303 19.1931 19.7747 16.4487 19.7747 13.0633C19.7747 10.6147 18.339 8.50146 16.2634 7.51942V3.36719C16.2634 2.53877 15.5918 1.86719 14.7634 1.86719H3.10031ZM15.2634 7.14953V3.36719C15.2634 3.09105 15.0395 2.86719 14.7634 2.86719H3.10031C2.82417 2.86719 2.60031 3.09105 2.60031 3.36719V9.00377H3.15292V3.96484H5.79236H6.79239H8.43182H9.43183H11.0713H12.0713H14.7107V7.02592C14.898 7.05876 15.0824 7.1001 15.2634 7.14953ZM13.7107 6.93394V4.96484H12.0713V7.13745C12.5735 7.00446 13.1009 6.93359 13.6449 6.93359C13.6669 6.93359 13.6888 6.93371 13.7107 6.93394ZM11.0713 7.49841V4.96484H9.43182L9.43183 8.61091C9.91152 8.15685 10.4645 7.77947 11.0713 7.49841ZM8.3317 10.0045H5.79236V10.0045H3.15292V10.0039H1.75211C1.47596 10.0039 1.25211 10.2278 1.25211 10.5039V15.6221C1.25211 15.8983 1.47596 16.1221 1.7521 16.1221H8.33162C7.81228 15.2219 7.51514 14.1773 7.51514 13.0633C7.51514 11.9493 7.81231 10.9047 8.3317 10.0045ZM8.43183 4.96484V9.00377H6.79239V4.96484H8.43183ZM5.79236 4.96484H4.15292V9.00377H5.79236V4.96484ZM18.7747 13.0633C18.7747 15.8964 16.478 18.1931 13.6449 18.1931C10.8118 18.1931 8.51514 15.8964 8.51514 13.0633C8.51514 10.2302 10.8118 7.93359 13.6449 7.93359C16.478 7.93359 18.7747 10.2302 18.7747 13.0633ZM14.455 10.2226C14.6503 10.0273 14.9669 10.0273 15.1621 10.2226L16.6376 11.698C16.7806 11.841 16.8234 12.0561 16.746 12.2429C16.6686 12.4298 16.4863 12.5516 16.284 12.5516H11.0631C10.787 12.5516 10.5631 12.3277 10.5631 12.0516C10.5631 11.7754 10.787 11.5516 11.0631 11.5516H15.0769L14.455 10.9297C14.2598 10.7344 14.2598 10.4178 14.455 10.2226ZM12.1276 15.9053C12.3229 16.1005 12.6395 16.1005 12.8347 15.9053C13.03 15.71 13.03 15.3934 12.8347 15.1982L12.2128 14.5762H16.2266C16.5028 14.5762 16.7266 14.3524 16.7266 14.0762C16.7266 13.8001 16.5028 13.5762 16.2266 13.5762H11.0057C10.8035 13.5762 10.6212 13.6981 10.5438 13.8849C10.4664 14.0717 10.5092 14.2868 10.6522 14.4298L12.1276 15.9053Z" fill="#262E30"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
1
resources/images/menu_obj_svg.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="2.5" y1="1.5" x2="12.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.5"/><path d="M1.541,12.5A12,12,0,0,1,12.5,1.541" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="12.5" y="0.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="0.5" y="12.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="1.5" r="1.5" style="fill:#949494"/></svg>
|
||||
|
After Width: | Height: | Size: 641 B |
1
resources/images/menu_obj_text.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.5h2a1,1,0,0,0,1-1v-9h4a1,1,0,0,0,1-1v-2a1,1,0,0,0-1-1H1.5a1,1,0,0,0-1,1v2a1,1,0,0,0,1,1h4v9a1,1,0,0,0,1,1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 290 B |
@@ -1,7 +1,7 @@
|
||||
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_8986_34986)">
|
||||
<rect x="0.906738" y="0.75" width="8.18652" height="8.5" rx="0.25" stroke="#262E30" stroke-width="0.5"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.44384 9.15385H8.70117C8.97731 9.15385 9.20117 8.92999 9.20117 8.65385V7.77134C9.01185 8.27195 8.7555 8.73679 8.44384 9.15385ZM9.20117 3.82879C8.50648 2.15978 6.91732 1 5.07962 1C3.0001 1 1.29827 2.76362 1.29827 4.96686C1.29827 6.81838 2.72798 8.30496 4.47852 8.30496C5.94047 8.30496 7.13782 7.06157 7.13782 5.51178C7.13782 4.20557 6.13326 3.17131 4.91131 3.17131C3.89774 3.17131 3.05347 4.0379 3.05347 5.12614C3.05347 6.02995 3.75348 6.74564 4.59072 6.74564C5.28371 6.74564 5.8635 6.1557 5.8635 5.40279C5.8635 4.78402 5.3879 4.30307 4.82315 4.30307C4.36259 4.30307 3.97515 4.69181 3.97515 5.20159C3.97515 5.6122 4.29181 5.93245 4.66286 5.93245C4.95511 5.93245 5.2063 5.68623 5.2063 5.35249C5.2063 5.09421 5.0032 4.89829 4.78307 4.89829C4.68224 4.89829 4.62549 4.93068 4.59194 4.96752C4.55575 5.00726 4.52157 5.08014 4.52157 5.20159C4.52157 5.31575 4.54634 5.35545 4.55458 5.36503L4.55474 5.36522C4.55684 5.36774 4.5704 5.38402 4.62626 5.38915C4.62683 5.38149 4.62732 5.3728 4.62771 5.36297C4.62901 5.32972 4.62886 5.29548 4.62868 5.25362V5.25361L4.62853 5.20159C4.62853 5.06352 4.74046 4.95159 4.87853 4.95159C5.0166 4.95159 5.12853 5.06352 5.12853 5.20159L5.12866 5.24197C5.12886 5.28728 5.12909 5.33744 5.12732 5.38257C5.12499 5.44205 5.11881 5.51557 5.09642 5.58704C5.07283 5.66237 5.02736 5.7474 4.93969 5.80987C4.85359 5.87123 4.75495 5.89069 4.66286 5.89069C4.4794 5.89069 4.30122 5.83726 4.17547 5.69103C4.0562 5.55233 4.02157 5.37247 4.02157 5.20159C4.02157 4.98771 4.08286 4.78393 4.22227 4.63086C4.36432 4.47488 4.56332 4.39829 4.78307 4.39829C5.3003 4.39829 5.7063 4.8395 5.7063 5.35249C5.7063 5.94093 5.25221 6.43245 4.66286 6.43245C3.992 6.43245 3.47515 5.86406 3.47515 5.20159C3.47515 4.4371 4.06549 3.80307 4.82315 3.80307C5.685 3.80307 6.3635 4.52932 6.3635 5.40279C6.3635 6.41041 5.58081 7.24564 4.59072 7.24564C3.45638 7.24564 2.55347 6.28465 2.55347 5.12614C2.55347 3.7832 3.60064 2.67131 4.91131 2.67131C6.43036 2.67131 7.63782 3.95086 7.63782 5.51178C7.63782 7.31536 6.23845 8.80496 4.47852 8.80496C2.43013 8.80496 0.798266 7.07231 0.798266 4.96686C0.798266 2.50892 2.703 0.5 5.07962 0.5C6.79575 0.5 8.30297 1.40023 9.20117 2.76765V3.82879Z" fill="#262E30"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M 8.4438 9.1539 H 8.7012 C 8.9773 9.1539 9.2012 8.93 9.2012 8.6539 V 7.7713 C 9.0119 8.272 8.7555 8.7368 8.4438 9.1539 Z M 9.2012 3.8288 C 8.5065 2.1598 6.93 1.034 5.083 1.017 C 2.782 1.027 1.06 2.838 1.055 4.949 C 1.093 7.012 2.315 8.449 4.443 8.472 C 6.229 8.469 7.388 7.067 7.388 5.597 C 7.375 4.094 6.057 3.257 5.137 3.255 C 4.05 3.261 3.288 3.912 3.282 4.997 C 3.286 5.783 3.937 6.291 4.447 6.291 C 5.047 6.277 5.255 5.872 5.259 5.666 C 5.261 5.432 5.065 5.307 4.866 5.481 C 4.53 5.663 4.244 5.057 4.942 4.827 C 5.359 4.73 5.766 5.095 5.77 5.568 C 5.759 6.389 5.152 6.798 4.434 6.814 C 3.429 6.803 2.728 5.942 2.732 4.984 C 2.737 3.612 3.784 2.734 5.14 2.73 C 6.549 2.743 7.93 3.946 7.939 5.584 C 7.922 7.596 6.442 9.017 4.474 9.021 C 2.65 8.999 1.659 8.176 0.848 6.941 C 0.842 6.291 0.848 5.943 0.841 4.933 C 0.842 4.454 0.837 3.979 0.842 3.234 C 1.231 2.331 2.398 0.508 5.0796 0.5 C 6.7957 0.5 8.303 1.4002 9.2012 2.7677 V 3.8288 Z" fill="#262E30"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_8986_34986">
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.3 KiB |
5
resources/images/step_mesh_info.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="407" height="141" viewBox="0 0 407 141" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M29.635 14.6721L70.408 1.42417L111.181 14.6721L136.38 49.3557V92.2269L111.181 126.91L70.408 140.158L29.635 126.91L4.43594 92.2269V49.3557L29.635 14.6721Z" stroke="#262E30"/>
|
||||
<path d="M309.925 6.6897L336.476 1.40823L363.028 6.6897L385.538 21.7301L400.578 44.2396L405.859 70.7913L400.578 97.343L385.538 119.852L363.028 134.893L336.476 140.174L309.925 134.893L287.415 119.852L272.375 97.343L267.093 70.7913L272.375 44.2395L287.415 21.7301L309.925 6.6897Z" stroke="#262E30"/>
|
||||
<path d="M257.937 80.4962C258.328 80.1057 258.328 79.4725 257.937 79.082L251.573 72.718C251.183 72.3275 250.549 72.3275 250.159 72.718C249.768 73.1085 249.768 73.7417 250.159 74.1322L255.816 79.7891L250.159 85.4459C249.768 85.8364 249.768 86.4696 250.159 86.8601C250.549 87.2507 251.183 87.2507 251.573 86.8601L257.937 80.4962ZM152 80.7891L257.23 80.7891L257.23 78.7891L152 78.7891L152 80.7891Z" fill="#262E30"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1001 B |
1
resources/images/svg_modifier.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="2.5" y1="1.5" x2="12.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.5"/><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"/><path d="M1.541,12.5A12,12,0,0,1,12.5,1.541" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><rect x="12.5" y="0.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="0.5" y="12.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="1.5" r="1.5" style="fill:#949494"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
resources/images/svg_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="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"/><line x1="2.5" y1="1.5" x2="12.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.5"/><path d="M1.541,12.5A12,12,0,0,1,12.5,1.541" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><rect x="12.5" y="0.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="0.5" y="12.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="1.5" r="1.5" style="fill:#949494"/></svg>
|
||||
|
After Width: | Height: | Size: 739 B |
1
resources/images/svg_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="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"/><line x1="2.5" y1="1.5" x2="12.5" y2="1.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.5"/><path d="M1.541,12.5A12,12,0,0,1,12.5,1.541" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><rect x="12.5" y="0.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><rect x="0.5" y="12.5" width="2" height="2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="1.5" cy="1.5" r="1.5" style="fill:#949494"/></svg>
|
||||
|
After Width: | Height: | Size: 758 B |
1
resources/images/text_bake.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.5c-3,0-5-1-5-4,0-5,6-5,4-10,7,2,9,6,9,9,0,4-3,5-6,5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M6.5,12.5a2.151,2.151,0,0,1-2-2c0-2,1-2,2-3,0,1,0,2,1,2s3-2,1-5c3,2,3,3,3,5a2.652,2.652,0,0,1-3,3" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 421 B |
1
resources/images/text_lock_closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="2.5" y="7.5" width="10" height="7" rx="1" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M3.5,7.5v-3a4,4,0,0,1,8,0v3" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 332 B |
1
resources/images/text_lock_open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="2.5" y="7.5" width="10" height="7" rx="1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M11.5,7.5v-3a4,4,0,0,0-7.874-1" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 335 B |
1
resources/images/text_obj_warning.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="M7.159.511l-7.034,13A1,1,0,0,0,.966,15H15.034a1,1,0,0,0,.841-1.494L8.841.511A.948.948,0,0,0,7.159.511Z" style="fill:#ff6f00"/><rect x="7" y="4" width="2" height="6" rx="1" style="fill:#fff"/><rect x="7" y="11" width="2" height="2" rx="1" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 355 B |
1
resources/images/text_open.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="M14.5,8.5v5a1,1,0,0,1-1,1H1.5a1,1,0,0,1-1-1V1.5a1,1,0,0,1,1-1h5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><line x1="14.5" y1="0.5" x2="4.5" y2="10.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="14.5" y1="5.5" x2="14.5" y2="0.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="9.5" y1="0.5" x2="14.5" y2="0.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 602 B |
1
resources/images/text_reflection_x.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="7" width="1" height="3" style="fill:#009688"/><rect x="7" y="12" width="1" height="3" style="fill:#009688"/><rect x="7" y="10" width="1" height="1" style="fill:#009688"/><rect x="7" y="4" width="1" height="1" style="fill:#009688"/><rect x="7" y="6" width="1" height="3" style="fill:#009688"/><polygon points="0.5 14.5 1.5 14.5 5.5 7.5 1.5 0.5 0.5 0.5 0.5 14.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="9.5 7.5 13.5 14.5 14.5 14.5 14.5 0.5 13.5 0.5 9.5 7.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 685 B |
1
resources/images/text_reflection_y.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="13" y="6" width="1" height="3" transform="translate(21 -6) rotate(90)" style="fill:#009688"/><rect x="1" y="6" width="1" height="3" transform="translate(9 6) rotate(90)" style="fill:#009688"/><rect x="4" y="7" width="1" height="1" transform="translate(12 3) rotate(90)" style="fill:#009688"/><rect x="10" y="7" width="1" height="1" transform="translate(18 -3) rotate(90)" style="fill:#009688"/><rect x="7" y="6" width="1" height="3" transform="translate(15 0) rotate(90)" style="fill:#009688"/><polygon points="0.5 0.5 0.5 1.5 7.5 5.5 14.5 1.5 14.5 0.5 0.5 0.5" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><polygon points="7.5 9.5 0.5 13.5 0.5 14.5 14.5 14.5 14.5 13.5 7.5 9.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 886 B |
1
resources/images/text_refresh.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="0.5 0.5 0.5 4.5 4.5 4.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><polyline points="14.5 14.5 14.5 10.5 10.5 10.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M14.5,7.5a7,7,0,0,0-13.326-3" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M.5,7.5a7,7,0,0,0,13.326,3" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>
|
||||
|
After Width: | Height: | Size: 565 B |
1
resources/images/text_save.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="M.5,13.5V1.5a1,1,0,0,1,1-1h10l3,3v10a1,1,0,0,1-1,1H1.5A1,1,0,0,1,.5,13.5Zm4-12v1a1,1,0,0,0,1,1h4a1,1,0,0,0,1-1v-1m1,12v-3a1,1,0,0,0-1-1h-6a1,1,0,0,0-1,1v3" style="fill:none;stroke:#949494;stroke-linecap:square;stroke-linejoin:round;opacity:1"/></svg>
|
||||
|
After Width: | Height: | Size: 342 B |
1
resources/images/text_undo.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="M13.914,6.45A6.5,6.5,0,0,0,2,4.044V1.5a.5.5,0,0,0-1,0v4a.5.5,0,0,0,.5.5h4a.5.5,0,0,0,0-1H2.612a5.477,5.477,0,1,1-.54,3.388.5.5,0,1,0-.987.162,6.5,6.5,0,0,0,11.693,2.743A6.459,6.459,0,0,0,13.914,6.45Z" style="fill:#ff6f00"/></svg>
|
||||
|
After Width: | Height: | Size: 321 B |
19
resources/images/toolbar_brimears.svg
Normal file
|
After Width: | Height: | Size: 194 KiB |
19
resources/images/toolbar_brimears_dark.svg
Normal file
|
After Width: | Height: | Size: 149 KiB |
5
resources/images/toolbar_reset_zero.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.6457 7C10.5448 7 10.4602 6.9247 10.4433 6.82524C10.1226 4.93741 8.47917 3.5 6.5 3.5C4.29086 3.5 2.5 5.29086 2.5 7.5C2.5 9.47929 3.93759 11.1228 5.82559 11.4434C5.92506 11.4603 6.00037 11.5448 6.00037 11.6457V12.7588C6.00037 12.8763 5.89925 12.9688 5.7827 12.9536C3.08405 12.6022 1 10.2945 1 7.5C1 4.46243 3.46243 2 6.5 2C9.29433 2 11.6019 4.08386 11.9536 6.78232C11.9688 6.89888 11.8763 7 11.7587 7H10.6457Z" fill="#FF6F00"/>
|
||||
<path d="M11.1649 9.76271C11.0854 9.87751 10.9156 9.87751 10.8361 9.76271L8.61993 6.5639C8.52803 6.43126 8.62296 6.25 8.78433 6.25H13.2167C13.3781 6.25 13.473 6.43126 13.3811 6.5639L11.1649 9.76271Z" fill="#FF6F00"/>
|
||||
<path d="M8.38678 7.61146C8.38678 8.48963 8.22064 9.15893 7.88836 9.61938C7.56082 10.0798 7.09326 10.31 6.48566 10.31C5.87807 10.31 5.40576 10.0822 5.06873 9.6265C4.73645 9.16605 4.57031 8.49438 4.57031 7.61146C4.57031 6.72855 4.73645 6.05687 5.06873 5.59643C5.40576 5.13598 5.87807 4.90576 6.48566 4.90576C7.09326 4.90576 7.56082 5.13598 7.88836 5.59643C8.22064 6.05687 8.38678 6.72855 8.38678 7.61146ZM5.85908 7.61146C5.85908 8.14786 5.90892 8.54659 6.00861 8.80767C6.11304 9.06874 6.27206 9.19928 6.48566 9.19928C6.69453 9.19928 6.8488 9.06874 6.94848 8.80767C7.04817 8.54184 7.09801 8.14311 7.09801 7.61146C7.09801 7.07982 7.04817 6.68346 6.94848 6.42238C6.8488 6.15656 6.69453 6.02364 6.48566 6.02364C6.27206 6.02364 6.11304 6.15181 6.00861 6.40814C5.90892 6.66447 5.85908 7.06558 5.85908 7.61146Z" fill="#FF6F00"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
4
resources/images/toolbar_reset_zero_hover.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2937 5.6687C9.71589 3.84914 8.01293 2.53076 6.00204 2.53076C3.51563 2.53076 1.5 4.54639 1.5 7.0328C1.5 9.27369 3.13722 11.1322 5.28073 11.4774C5.38062 11.4935 5.4564 11.5783 5.4564 11.6794V12.7916C5.4564 12.9091 5.35522 13.0016 5.23861 12.9868C2.28425 12.6118 0 10.0891 0 7.0328C0 3.71797 2.68721 1.03076 6.00204 1.03076C8.84765 1.03076 11.2307 3.01105 11.8484 5.6687H13.3662C13.5275 5.6687 13.6225 5.84996 13.5306 5.9826L11.0772 9.52371C10.9977 9.63851 10.8279 9.63851 10.7484 9.52371L8.29505 5.9826C8.20315 5.84996 8.29808 5.6687 8.45945 5.6687H10.2937Z" fill="#FF6F00"/>
|
||||
<path d="M7.99414 7.03451C7.99414 7.96884 7.81738 8.68095 7.46384 9.17084C7.11537 9.66073 6.6179 9.90568 5.97144 9.90568C5.32499 9.90568 4.82247 9.66326 4.46389 9.17842C4.11036 8.68852 3.93359 7.97389 3.93359 7.03451C3.93359 6.09513 4.11036 5.38049 4.46389 4.8906C4.82247 4.40071 5.32499 4.15576 5.97144 4.15576C6.6179 4.15576 7.11537 4.40071 7.46384 4.8906C7.81738 5.38049 7.99414 6.09513 7.99414 7.03451ZM5.30479 7.03451C5.30479 7.60521 5.35782 8.02944 5.46387 8.30722C5.57498 8.58499 5.74417 8.72388 5.97144 8.72388C6.19366 8.72388 6.3578 8.58499 6.46386 8.30722C6.56992 8.02439 6.62295 7.60016 6.62295 7.03451C6.62295 6.46886 6.56992 6.04715 6.46386 5.76937C6.3578 5.48655 6.19366 5.34514 5.97144 5.34514C5.74417 5.34514 5.57498 5.4815 5.46387 5.75422C5.35782 6.02695 5.30479 6.45371 5.30479 7.03451Z" fill="#FF6F00"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
resources/model/double_tear_romboid_cylinder.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
resources/model/double_tear_romboid_cylinder.stl
Normal file
@@ -9,7 +9,7 @@
|
||||
"description": "TPU: not supported"
|
||||
},
|
||||
{
|
||||
"vendor": "QIDIlab",
|
||||
"vendor": "QIDITech",
|
||||
"type": "TPU",
|
||||
"action": "prohibition",
|
||||
"description": "TPU: not supported"
|
||||
@@ -45,13 +45,13 @@
|
||||
"description": "CF/GF: hard and brittle"
|
||||
},
|
||||
{
|
||||
"vendor": "QIDIlab",
|
||||
"vendor": "QIDITech",
|
||||
"type": "PET-CF",
|
||||
"action": "prohibition",
|
||||
"description": "QIDI PET-CF/PA6-CF: not supported"
|
||||
},
|
||||
{
|
||||
"vendor": "QIDIlab",
|
||||
"vendor": "QIDITech",
|
||||
"type": "PA6-CF",
|
||||
"action": "prohibition",
|
||||
"description": "QIDI PET-CF/PA6-CF: not supported"
|
||||
|
||||