diff options
author | Dennis Lamm <expeditioneer@gentoo.org> | 2020-11-29 16:09:41 +0100 |
---|---|---|
committer | Dennis Lamm <expeditioneer@gentoo.org> | 2020-11-30 19:37:41 +0100 |
commit | 7a67b46fa6e5dda158561b25b61129f4a282536a (patch) | |
tree | 0b98509cc3072e3105613ecfdbeb2331ca4f5740 /dev-libs | |
parent | media-gfx/fdm-materials: bump to 4.8.0 (diff) | |
download | gentoo-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>
Diffstat (limited to 'dev-libs')
-rw-r--r-- | dev-libs/libnest2d/Manifest | 1 | ||||
-rw-r--r-- | dev-libs/libnest2d/files/libnest2d-0.4-add-disallowed-areas.patch | 122 | ||||
-rw-r--r-- | dev-libs/libnest2d/libnest2d-0.4.ebuild | 39 | ||||
-rw-r--r-- | dev-libs/libnest2d/metadata.xml | 23 |
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> |