From 085f022003f6d482be121e3f29f9a2cdddf15489 Mon Sep 17 00:00:00 2001 From: Karl Nilsson Date: Wed, 11 Nov 2020 22:27:26 -0500 Subject: [PATCH] New package: libnest2d-0.4 --- srcpkgs/libnest2d-devel | 1 + .../patches/allow-disallowed-areas.patch | 122 ++++++++++++++++++ srcpkgs/libnest2d/patches/fix-cmake.patch | 65 ++++++++++ srcpkgs/libnest2d/patches/soversion.patch | 21 +++ srcpkgs/libnest2d/template | 25 ++++ 5 files changed, 234 insertions(+) create mode 120000 srcpkgs/libnest2d-devel create mode 100644 srcpkgs/libnest2d/patches/allow-disallowed-areas.patch create mode 100644 srcpkgs/libnest2d/patches/fix-cmake.patch create mode 100644 srcpkgs/libnest2d/patches/soversion.patch create mode 100644 srcpkgs/libnest2d/template diff --git a/srcpkgs/libnest2d-devel b/srcpkgs/libnest2d-devel new file mode 120000 index 00000000000..df358dcc31a --- /dev/null +++ b/srcpkgs/libnest2d-devel @@ -0,0 +1 @@ +libnest2d \ No newline at end of file diff --git a/srcpkgs/libnest2d/patches/allow-disallowed-areas.patch b/srcpkgs/libnest2d/patches/allow-disallowed-areas.patch new file mode 100644 index 00000000000..6cc19a82c56 --- /dev/null +++ b/srcpkgs/libnest2d/patches/allow-disallowed-areas.patch @@ -0,0 +1,122 @@ +From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:13:15 +0200 +Subject: [PATCH 1/3] Allow for an item to be a disallowed area + +Disallowed areas have slightly different behaviour from fixed items: Other items won't get packed closely around them. Implementation of that pending. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git include/libnest2d/nester.hpp include/libnest2d/nester.hpp +index 2f207d5..932a060 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -71,6 +71,15 @@ class _Item { + int binid_{BIN_ID_UNSET}, priority_{0}; + bool fixed_{false}; + ++ /** ++ * \brief If this is a fixed area, indicates whether it is a disallowed area ++ * or a previously placed item. ++ * ++ * If this is a disallowed area, other objects will not get packed close ++ * together with this item. It only blocks other items in its area. ++ */ ++ bool disallowed_{false}; ++ + public: + + /// The type of the shape which was handed over as the template argument. +@@ -129,11 +138,18 @@ class _Item { + sh_(sl::create(std::move(contour), std::move(holes))) {} + + inline bool isFixed() const noexcept { return fixed_; } ++ inline bool isDisallowedArea() const noexcept { return disallowed_; } + inline void markAsFixedInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; + } ++ inline void markAsDisallowedAreaInBin(int binid) ++ { ++ fixed_ = binid >= 0; ++ binid_ = binid; ++ disallowed_ = true; ++ } + + inline void binId(int idx) { binid_ = idx; } + inline int binId() const noexcept { return binid_; } + +From ff61049e59d3151462bca7ff2e2268c2b32731e7 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:14:36 +0200 +Subject: [PATCH 2/3] Allow unsetting of being a disallowed area + +If you set the bin to -1 or set the item to be a simple fixed item afterwards, it'll no longer be a disallowed area. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git include/libnest2d/nester.hpp include/libnest2d/nester.hpp +index 932a060..54761a6 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -143,12 +143,13 @@ class _Item { + { + fixed_ = binid >= 0; + binid_ = binid; ++ disallowed_ = false; + } + inline void markAsDisallowedAreaInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; +- disallowed_ = true; ++ disallowed_ = fixed_; + } + + inline void binId(int idx) { binid_ = idx; } + +From 31391fd173249ad9b906390058e13b09238fadc8 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Thu, 8 Oct 2020 11:06:58 +0200 +Subject: [PATCH 3/3] Align items to their starting position if all placed + items are disallowed + +We shouldn't align items to disallowed areas. So place them in the starting position according to the alignment property. + +Lot of work to investigate. But very little code changes! + +Contributes to issue CURA-7754. +--- + include/libnest2d/placers/nfpplacer.hpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git include/libnest2d/placers/nfpplacer.hpp include/libnest2d/placers/nfpplacer.hpp +index 96a8cff..b0ebb15 100644 +--- a/include/libnest2d/placers/nfpplacer.hpp ++++ b/include/libnest2d/placers/nfpplacer.hpp +@@ -101,7 +101,7 @@ struct NfpPConfig { + * alignment with the candidate item or do anything else. + * + * \param remaining A container with the remaining items waiting to be +- * placed. You can use some features about the remaining items to alter to ++ * placed. You can use some features about the remaining items to alter the + * score of the current placement. If you know that you have to leave place + * for other items as well, that might influence your decision about where + * the current candidate should be placed. E.g. imagine three big circles +@@ -735,7 +735,8 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer +Date: Sun, 14 Feb 2021 11:29:18 +0330 +Subject: [PATCH 1/2] Fix CMake Error at CMakeLists.txt:125 (install) + +When using such command: + +cmake .. -DLIBNEST2D_HEADER_ONLY=OFF -DCMAKE_INSTALL_PREFIX=./installdir -DRP_ENABLE_DOWNLOADING=ON + +This error is thrown: + +CMake Error at CMakeLists.txt:125 (install): + install TARGETS given no ARCHIVE DESTINATION for static library target + "libnest2d_clipper_nlopt". + +This commit fixes the error as far as tested. +--- + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index c2f2bec..ab71296 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -124,6 +124,7 @@ export(EXPORT ${PROJECT_NAME}Targets + + install(TARGETS libnest2d libnest2d_headeronly ${LIBNAME} + EXPORT ${PROJECT_NAME}Targets ++ ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + ) + + +From 6be371cad6ecaaf0d11b541400c3c8d77e605cd7 Mon Sep 17 00:00:00 2001 +From: Megidd +Date: Sun, 14 Feb 2021 13:14:31 +0330 +Subject: [PATCH 2/2] Also consider another error: + +When running this command: + +cmake .. -DLIBNEST2D_HEADER_ONLY=OFF -DCMAKE_INSTALL_PREFIX=./installdir -DRP_ENABLE_DOWNLOADING=ON -DBUILD_SHARED_LIBS=ON + +This error is thrown: + +CMake Error at CMakeLists.txt:125 (install): + install TARGETS given no LIBRARY DESTINATION for shared library target + "libnest2d_clipper_nlopt". + +This commits resolves the error, as far as tested. +--- + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ab71296..1b9d4ed 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -125,6 +125,7 @@ export(EXPORT ${PROJECT_NAME}Targets + install(TARGETS libnest2d libnest2d_headeronly ${LIBNAME} + EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION lib ++ LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + ) + diff --git a/srcpkgs/libnest2d/patches/soversion.patch b/srcpkgs/libnest2d/patches/soversion.patch new file mode 100644 index 00000000000..1a1c53495de --- /dev/null +++ b/srcpkgs/libnest2d/patches/soversion.patch @@ -0,0 +1,21 @@ +From 12b64796aee24d5af41df3a10c4313dc713c3e74 Mon Sep 17 00:00:00 2001 +From: Karl Nilsson +Date: Wed, 13 Jan 2021 21:51:34 -0500 +Subject: [PATCH] CMake: add SOVERSION to shared library + +--- + CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 374e90f..c2f2bec 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -95,6 +95,7 @@ if(NOT LIBNEST2D_HEADER_ONLY) + add_library(${LIBNAME} ${PROJECT_SOURCE_DIR}/src/libnest2d.cpp) + set_target_properties(${LIBNAME} PROPERTIES PREFIX "") + set_target_properties(${LIBNAME} PROPERTIES DEBUG_POSTFIX "d") ++ set_target_properties(${LIBNAME} PROPERTIES SOVERSION "1.0") + target_link_libraries(${LIBNAME} PUBLIC libnest2d_headeronly) + target_compile_definitions(${LIBNAME} PUBLIC LIBNEST2D_STATIC) + target_sources(${LIBNAME} PRIVATE ${LIBNEST2D_SRCFILES}) diff --git a/srcpkgs/libnest2d/template b/srcpkgs/libnest2d/template new file mode 100644 index 00000000000..bb68eac3f97 --- /dev/null +++ b/srcpkgs/libnest2d/template @@ -0,0 +1,25 @@ +# Template file for 'libnest2d' +pkgname=libnest2d +version=0.4 +revision=1 +build_style=cmake +configure_args="-DBUILD_SHARED_LIBS=ON -DLIBNEST2D_HEADER_ONLY=OFF + -DLIBNEST2D_BUILD_UNITTESTS=ON -DCMAKE_CXX_STANDARD=14" +makedepends="clipper-devel nlopt-devel boost-devel catch2" +checkdepends="catch2" +short_desc="2D irregular bin packing and nesting library" +maintainer="Karl Nilsson " +license="LGPL-3.0-or-later" +homepage="https://github.com/tamasmeszaros/libnest2d" +distfiles="https://github.com/tamasmeszaros/libnest2d/archive/${version}.tar.gz" +checksum=00c909aa5690bead2be36cc57653c54c7c69d260a3c74924e9dfd79994729a2a + +libnest2d-devel_package() { + depends="${sourcepkg}>=${version}_${revision}" + short_desc+=" - development files" + pkg_install() { + vmove usr/include + vmove usr/lib/cmake + vmove "usr/lib/*.so" + } +}