Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
0a582a0
Merge tag 'v1.4' into develop
panzergame Jul 20, 2023
379a568
feat: move path top or bottom with two buttons
panzergame Aug 24, 2023
f66f041
feat: Implement undo and redo actions
panzergame Aug 24, 2023
103e566
chore: track modification for move top/bottom path
panzergame Aug 24, 2023
d383069
fix: missing files
panzergame Aug 24, 2023
26aabad
chore: cleanup
panzergame Aug 24, 2023
7c02524
fix: selection in path and layer list
panzergame Aug 24, 2023
3dc3f95
fix: sort paths by lengths between all layers and not only inside layers
panzergame Aug 24, 2023
742e496
chore: reatiain UI space for path parameters when no paths are selected
panzergame Aug 24, 2023
1c7942b
chore: increase simulation time slider step
panzergame Aug 24, 2023
194795e
fix: setting snot saved when setting windows closed
panzergame Aug 25, 2023
4a43c7d
feat: Introduce an optimizer for path cut order respecting group order.
panzergame Aug 27, 2023
655947a
feat: Restrict path ordering to group of similar length
panzergame Aug 27, 2023
8f401b7
fix: visibility not handled for path loaded from dxfplot
panzergame Sep 2, 2023
863f83b
feat: Make first pass at depth 0 optional from configuration
panzergame Sep 2, 2023
756da5e
Merge branch 'feature/optimize-path' into develop
panzergame Sep 2, 2023
c8815cb
trigger ci
panzergame Sep 2, 2023
867e498
fix: missing dependencies
panzergame Sep 2, 2023
284d6bd
Update sonarcloud.yml
panzergame Sep 2, 2023
4b59903
Update sonarcloud.yml
panzergame Sep 2, 2023
3ed5751
fix: ensure config.h is genertaed before dxfplot importer is compiled.
panzergame Nov 27, 2023
f7ff0f1
feat: add laser option skipping depth management
panzergame Aug 10, 2024
0e7b7e2
feat: hide depth field when a laser tool is selected
panzergame Dec 23, 2024
9d9d5e0
feat: use docker for ubuntu build
panzergame Aug 11, 2024
ca0a2f2
fix: geninfo ignore line mismatch
panzergame Dec 26, 2024
bba1046
feat: update sonar scanner
panzergame Dec 27, 2024
279cba8
fix: use generic docker image name
panzergame Jul 24, 2025
d4ff254
feat: update third parties
panzergame Jul 25, 2025
4a5deb3
feat: update to qt6
panzergame Jul 25, 2025
94a2766
feat: update docker for qt6
panzergame Jul 25, 2025
cffe835
feat: use Qt6_DIR for cmake build
panzergame Jul 25, 2025
0e8cba3
fix: appimage build and deploy
panzergame Jul 24, 2025
df56d81
Merge branch 'feature/docker_build_appimage' into develop
panzergame Jul 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/deploy-linux-appimage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@ on:
jobs:
deploy:
runs-on: ubuntu-latest
container:
image: ghcr.io/${{ github.repository }}/ubuntu:feature-docker_build_appimage
options: --cap-add SYS_ADMIN --device /dev/fuse --security-opt apparmor:unconfined
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: true
- name: Install package
run: |
sudo apt-get update
sudo apt-get -y install qtbase5-dev qt3d5-dev libqt5svg5-dev freeglut3-dev
fetch-depth: 0
- name: Build and test
run: ci/buildappimage.sh
env:
LD_LIBRARY_PATH: /opt/lib
- name: Create Release
uses: softprops/action-gh-release@v1
with:
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/docker-ubuntu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
on:
workflow_dispatch:
push:
paths:
- "ci/docker/ubuntu/**"

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}/ubuntu

jobs:
build-ubuntu-docker:
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: ci/docker/ubuntu/
file: ci/docker/ubuntu/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
14 changes: 2 additions & 12 deletions .github/workflows/sonarcloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,13 @@ on:
jobs:
static_analysis:
runs-on: ubuntu-latest
container:
image: ghcr.io/${{ github.repository }}/ubuntu:develop
steps:
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
- name: Install package
run: |
sudo apt-get update
sudo apt-get -y install qtbase5-dev qt3d5-dev libqt5svg5-dev freeglut3-dev lcov
- name: Install build wrapper
run: |
wget http://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip
unzip build-wrapper-linux-x86.zip
- name: Install sonar scanner
run: |
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip
unzip sonar-scanner-cli-4.6.2.2472-linux.zip
- name: Build and scan
run: ci/buildsonarcloud.sh
env:
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@
[submodule "thirdparty/fmt"]
path = thirdparty/fmt
url = https://github.com/fmtlib/fmt.git
[submodule "thirdparty/or-tools"]
path = thirdparty/or-tools
url = https://github.com/google/or-tools.git
32 changes: 20 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.8)

project(dxfplotter)

Expand All @@ -18,6 +18,12 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)

set(BUILD_TESTS OFF)
set(BUILD_SAMPLES OFF)
set(BUILD_EXAMPLES OFF)
set(USE_SCIP OFF)
set(USE_COINOR OFF)
set(BUILD_FLATZINC OFF)
set(USE_HIGHS OFF)
set(JUST_INSTALL_CEREAL ON)

set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
Expand All @@ -26,7 +32,7 @@ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
if(MSVC)
add_compile_options(/W4)
else()
add_compile_options(-fPIC -Wall -Wextra)
add_compile_options(-fPIC -Wall -Wextra -DNDEBUG)
endif()

set(CMAKE_CXX_STANDARD 17)
Expand All @@ -37,8 +43,9 @@ set(TEMPLATE_DIR ${PROJECT_SOURCE_DIR}/template)
find_package(codecov)

find_package(PythonInterp REQUIRED)
find_package(ortools CONFIG REQUIRED)

find_package(Qt5 COMPONENTS REQUIRED
find_package(Qt6 COMPONENTS REQUIRED
Core
Widgets
Gui
Expand All @@ -47,7 +54,7 @@ find_package(Qt5 COMPONENTS REQUIRED
3DExtras
)

#qt_standard_project_setup()
qt_standard_project_setup()

set(INCLUDE_DIRS
src
Expand All @@ -58,13 +65,14 @@ set(INCLUDE_DIRS
thirdparty/nanoflann/include
thirdparty/units/include
thirdparty/yaml-cpp/include
thirdparty/or-tools
template
${CMAKE_BINARY_DIR}/src
${CMAKE_BINARY_DIR}/template
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt53DCore_INCLUDE_DIRS}
${Qt53DExtras_INCLUDE_DIRS}
${Qt6Widgets_INCLUDE_DIRS}
${Qt6Gui_INCLUDE_DIRS}
${Qt63DCore_INCLUDE_DIRS}
${Qt63DExtras_INCLUDE_DIRS}
)

set(LINK_LIBRARIES
Expand All @@ -87,10 +95,10 @@ set(LINK_LIBRARIES
geometry-filter
libdxfrw
fmt::fmt
Qt5::Widgets
Qt5::Svg
Qt5::3DCore
Qt5::3DExtras
Qt6::Widgets
Qt6::Svg
Qt6::3DCore
Qt6::3DExtras
yaml-cpp
)

Expand Down
4 changes: 3 additions & 1 deletion ci/buildappimage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ trap cleanup EXIT
REPO_ROOT=$(readlink -f $(dirname $(dirname $0)))
OLD_CWD=$(readlink -f .)

git config --global --add safe.directory $REPO_ROOT

# generate release name
COMMIT=$(git rev-parse --short HEAD)
TAG=$(git describe --tags)
Expand All @@ -35,7 +37,7 @@ pushd "$BUILD_DIR"

# configure build files with CMake
# we need to explicitly set the install prefix, as CMake's default is /usr/local for some reason...
cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_TESTING=OFF
cmake "$REPO_ROOT" -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_TESTING=OFF -DQt6_DIR=/opt/qt/6.8.2/gcc_64/lib/cmake/Qt6

# build project and install files into AppDir
make -j$(nproc)
Expand Down
6 changes: 3 additions & 3 deletions ci/buildsonarcloud.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ pushd "$BUILD_DIR"

# configure build files with CMake
# we need to explicitly set the install prefix, as CMake's default is /usr/local for some reason...
cmake "$REPO_ROOT" -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON
cmake "$REPO_ROOT" -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON -DQt6_DIR=/opt/qt/6.8.2/gcc_64/lib/cmake/Qt6

# Wraps the compilation with the Build Wrapper to generate configuration (used
# later by the SonarQube Scanner) into the "bw-output" folder
"$REPO_ROOT"/build-wrapper-linux-x86/build-wrapper-linux-x86-64 \
/opt/build-wrapper-linux-x86/build-wrapper-linux-x86-64 \
--out-dir bw-output cmake \
--build .
# Test project
Expand All @@ -44,6 +44,6 @@ ctest -VV
make gcov

# Scan project
"$REPO_ROOT"/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner -Dsonar.host.url=https://sonarcloud.io -Dproject.settings="$REPO_ROOT"/sonar-project.properties -Dsonar.projectBaseDir="$REPO_ROOT" -Dsonar.cfamily.gcov.reportsPath="$BUILD_DIR"
/opt/sonar-scanner-6.2.1.4610-linux-x64/bin/sonar-scanner -Dsonar.host.url=https://sonarcloud.io -Dproject.settings="$REPO_ROOT"/sonar-project.properties -Dsonar.projectBaseDir="$REPO_ROOT" -Dsonar.cfamily.gcov.reportsPath="$BUILD_DIR"


24 changes: 24 additions & 0 deletions ci/docker/ubuntu/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM ubuntu:noble

RUN apt update && apt install -y libglib2.0-bin libdbus-1-3 libgtk-3-0 \
libxcb* libxkbcommon* \
freeglut3-dev lcov \
build-essential cmake \
fuse file

RUN apt update && apt install -y wget unzip git python3-jinja2 python3-pip
RUN pip install aqtinstall --break-system-packages

RUN aqt install-qt -O /opt/qt linux desktop 6.8.2 -m qt3d qtshadertools
ENV PATH="/opt/qt/6.8.2/gcc_64/bin/:$PATH"

RUN wget http://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip
RUN unzip build-wrapper-linux-x86.zip -d /opt

RUN wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-6.2.1.4610-linux-x64.zip
RUN unzip sonar-scanner-cli-6.2.1.4610-linux-x64.zip -d /opt

RUN wget https://github.com/google/or-tools/releases/download/v9.10/or-tools_amd64_ubuntu-24.04_cpp_v9.10.4067.tar.gz
RUN tar -C /opt --strip-components=1 -xvf or-tools_amd64_ubuntu-24.04_cpp_v9.10.4067.tar.gz

RUN git config --global --add safe.directory '*'
4 changes: 2 additions & 2 deletions cmake/FindLcov.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ function (lcov_capture_initial_tgt TNAME)
list(APPEND GENINFO_FILES ${OUTFILE})

add_custom_command(OUTPUT ${OUTFILE} COMMAND ${GCOV_ENV} ${GENINFO_BIN}
--quiet --base-directory ${PROJECT_SOURCE_DIR} --initial
--quiet --ignore-errors mismatch --base-directory ${PROJECT_SOURCE_DIR} --initial
--gcov-tool ${GCOV_BIN} --output-filename ${OUTFILE}
${GENINFO_EXTERN_FLAG} ${TDIR}/${FILE}.gcno
DEPENDS ${TNAME}
Expand Down Expand Up @@ -269,7 +269,7 @@ function (lcov_capture_tgt TNAME)

add_custom_command(OUTPUT ${OUTFILE}
COMMAND test -s "${TDIR}/${FILE}.gcda"
&& ${GCOV_ENV} ${GENINFO_BIN} --quiet --base-directory
&& ${GCOV_ENV} ${GENINFO_BIN} --quiet --ignore-errors mismatch --base-directory
${PROJECT_SOURCE_DIR} --gcov-tool ${GCOV_BIN}
--output-filename ${OUTFILE} ${GENINFO_EXTERN_FLAG}
${TDIR}/${FILE}.gcda
Expand Down
2 changes: 1 addition & 1 deletion resource/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
qt5_add_resources(SOURCES resource.qrc)
qt_add_resources(SOURCES resource.qrc)

add_library(resource ${SOURCES})

Expand Down
22 changes: 22 additions & 0 deletions resource/icons/layer-bottom.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions resource/icons/layer-top.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions resource/icons/optimize-order.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions resource/resource.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,15 @@
<file>icons/edit-copy.svg</file>
<file>icons/go-down.svg</file>
<file>icons/go-up.svg</file>
<file>icons/layer-bottom.svg</file>
<file>icons/layer-lower.svg</file>
<file>icons/layer-raise.svg</file>
<file>icons/layer-top.svg</file>
<file>icons/layer-visible-off.svg</file>
<file>icons/layer-visible-on.svg</file>
<file>icons/list-add.svg</file>
<file>icons/list-remove.svg</file>
<file>icons/optimize-order.svg</file>
<file>icons/path-inset.svg</file>
<file>icons/path-outset.svg</file>
<file>icons/playback-pause.svg</file>
Expand Down
21 changes: 21 additions & 0 deletions src/common/copy.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once

#include <vector>
#include <memory>
#include <algorithm>

namespace common
{

template <class Item, class ItemUPtr = std::unique_ptr<Item>>
std::vector<ItemUPtr> deepcopy(const std::vector<ItemUPtr> &other)
{
std::vector<ItemUPtr> duplicated(other.size());
std::transform(other.begin(), other.end(), duplicated.begin(), [](const ItemUPtr &item){
return std::make_unique<Item>(*item);
});

return duplicated;
}

}
1 change: 0 additions & 1 deletion src/config/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ Config::Config(const Config &other)

Config::~Config()
{
save();
}

Root &Config::root()
Expand Down
2 changes: 2 additions & 0 deletions src/exporter/gcode/metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class Document;
}

class QJsonObject;
class QJsonArray;
class QJsonDocument;

namespace exporter::gcode
{
Expand Down
Loading
Loading