summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Lamm <expeditioneer@gentoo.org>2020-11-29 16:09:41 +0100
committerDennis Lamm <expeditioneer@gentoo.org>2020-11-30 19:37:41 +0100
commit7a67b46fa6e5dda158561b25b61129f4a282536a (patch)
tree0b98509cc3072e3105613ecfdbeb2331ca4f5740
parentmedia-gfx/fdm-materials: bump to 4.8.0 (diff)
downloadgentoo-7a67b46fa6e5dda158561b25b61129f4a282536a.tar.gz
gentoo-7a67b46fa6e5dda158561b25b61129f4a282536a.tar.bz2
gentoo-7a67b46fa6e5dda158561b25b61129f4a282536a.zip
dev-libs/libnest2d: added new ebuild
Signed-off-by: Dennis Lamm <expeditoneer@gentoo.org> Signed-off-by: Dennis Lamm <expeditioneer@gentoo.org>
-rw-r--r--dev-libs/libnest2d/Manifest1
-rw-r--r--dev-libs/libnest2d/files/libnest2d-0.4-add-disallowed-areas.patch122
-rw-r--r--dev-libs/libnest2d/libnest2d-0.4.ebuild39
-rw-r--r--dev-libs/libnest2d/metadata.xml23
4 files changed, 185 insertions, 0 deletions
diff --git a/dev-libs/libnest2d/Manifest b/dev-libs/libnest2d/Manifest
new file mode 100644
index 000000000000..c11b486d54e2
--- /dev/null
+++ b/dev-libs/libnest2d/Manifest
@@ -0,0 +1 @@
+DIST libnest2d-0.4.tar.gz 365065 BLAKE2B 74a4aef18be22d24e4e73288dd3e330b2f5baa3b2c705683c22767dfb0394a7b332bad957321f57ec7eaaf4740cff9ca1ed86f9d552be65df1b2af76ceba61e9 SHA512 fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c
diff --git a/dev-libs/libnest2d/files/libnest2d-0.4-add-disallowed-areas.patch b/dev-libs/libnest2d/files/libnest2d-0.4-add-disallowed-areas.patch
new file mode 100644
index 000000000000..ed48cd3eeff8
--- /dev/null
+++ b/dev-libs/libnest2d/files/libnest2d-0.4-add-disallowed-areas.patch
@@ -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 a/include/libnest2d/nester.hpp b/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 a/include/libnest2d/nester.hpp b/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 a/include/libnest2d/placers/nfpplacer.hpp b/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;
diff --git a/dev-libs/libnest2d/libnest2d-0.4.ebuild b/dev-libs/libnest2d/libnest2d-0.4.ebuild
new file mode 100644
index 000000000000..6a9a278110f4
--- /dev/null
+++ b/dev-libs/libnest2d/libnest2d-0.4.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake
+
+DESCRIPTION="Library and framework for the 2D bin packaging problem"
+HOMEPAGE="https://github.com/tamasmeszaros/libnest2d"
+SRC_URI="https://github.com/tamasmeszaros/libnest2d/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="LGPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+IUSE="examples static-libs test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-cpp/eigen:3
+ dev-libs/boost
+ dev-libs/clipper
+ sci-libs/nlopt
+ "
+DEPEND="${RDEPEND}
+ test? ( >=dev-cpp/catch-2.9.1 )
+ "
+
+PATCHES=( "${FILESDIR}"/${P}-add-disallowed-areas.patch )
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_SHARED_LIBS=ON
+ -DLIBNEST2D_BUILD_EXAMPLES=$(usex examples)
+ -DLIBNEST2D_HEADER_ONLY=$(usex static-libs OFF ON)
+ -DLIBNEST2D_BUILD_UNITTESTS=$(usex test)
+ )
+ cmake_src_configure
+}
diff --git a/dev-libs/libnest2d/metadata.xml b/dev-libs/libnest2d/metadata.xml
new file mode 100644
index 000000000000..a80bd99b8c28
--- /dev/null
+++ b/dev-libs/libnest2d/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>3dprint@gentoo.org</email>
+ <name>Gentoo 3D Printer Project</name>
+ </maintainer>
+ <longdescription>
+ Libnest2D is a library and framework for the 2D bin packaging problem. Inspired from the SVGNest Javascript
+ library the project is built from scratch in C++11. The library is written with a policy that it should be
+ usable out of the box with a very simple interface but has to be customizable to the very core as well. The
+ algorithms are defined in a header only fashion with templated geometry types. These geometries can have custom
+ or already existing implementation to avoid copying or having unnecessary dependencies.
+
+ A default backend is provided if the user of the library just wants to use it out of the box without additional
+ integration. This backend is reasonably fast and robust, being built on top of boost geometry and the
+ polyclipping library. Usage of this default backend implies the dependency on these packages but its header only
+ as well.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">tamasmeszaros/libnest2d</remote-id>
+ </upstream>
+</pkgmetadata>