New package: libnest2d-0.4

This commit is contained in:
Karl Nilsson 2020-11-11 22:27:26 -05:00 committed by Érico Nogueira Rolim
parent d54feeac1f
commit 085f022003
5 changed files with 234 additions and 0 deletions

1
srcpkgs/libnest2d-devel Symbolic link
View file

@ -0,0 +1 @@
libnest2d

View file

@ -0,0 +1,122 @@
From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001
From: Ghostkeeper <rubend@tutanota.com>
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<RawShape>(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 <rubend@tutanota.com>
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 <rubend@tutanota.com>
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<RawShape, TBin
remlist.insert(remlist.end(), remaining.from, remaining.to);
}
- if(items_.empty()) {
+ if(std::all_of(items_.begin(), items_.end(),
+ [](const Item& item) { return item.isDisallowedArea(); })) {
setInitialPosition(item);
best_overfit = overfit(item.transformedShape(), bin_);
can_pack = best_overfit <= 0;

View file

@ -0,0 +1,65 @@
From fac1e5d5da70e7fb56c520eb2d9b6a6e3282459e Mon Sep 17 00:00:00 2001
From: Megidd <megiddgit@gmail.com>
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 <megiddgit@gmail.com>
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
)

View file

@ -0,0 +1,21 @@
From 12b64796aee24d5af41df3a10c4313dc713c3e74 Mon Sep 17 00:00:00 2001
From: Karl Nilsson <karl.robert.nilsson@gmail.com>
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})

View file

@ -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 <karl.robert.nilsson@gmail.com>"
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"
}
}