diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2020-12-14 13:26:14 +0000 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2020-12-14 13:26:14 +0000 |
commit | 6abbf81ef2f298e3221ff5e67a1f3c5f23958212 (patch) | |
tree | 25413d1cb3a0cbfe36029db32398c0f333609215 /dev-libs/libnest2d | |
parent | 9c417bacd51da6d8b57fa9f37425161d30d4b95b (diff) |
gentoo resync : 14.12.2020
Diffstat (limited to 'dev-libs/libnest2d')
-rw-r--r-- | dev-libs/libnest2d/Manifest | 4 | ||||
-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, 188 insertions, 0 deletions
diff --git a/dev-libs/libnest2d/Manifest b/dev-libs/libnest2d/Manifest new file mode 100644 index 000000000000..765bb379e432 --- /dev/null +++ b/dev-libs/libnest2d/Manifest @@ -0,0 +1,4 @@ +AUX libnest2d-0.4-add-disallowed-areas.patch 4671 BLAKE2B 1b57d9a00f9ad5df3d0396d039bcf64570dedb0da939ad60a6eeca199de280a413fa80c4fb6edf976b920634243ce1f8da6a7c00cf08930a6309c4955f48f7e4 SHA512 1915a937b91c1e3d06d4a0b5914d706f84da171cfd2ebf161b0017e67a5a28bbefd80d7a290348735b4143e4b67f421c5d611831af1b89b76371327d74d11508 +DIST libnest2d-0.4.tar.gz 365065 BLAKE2B 74a4aef18be22d24e4e73288dd3e330b2f5baa3b2c705683c22767dfb0394a7b332bad957321f57ec7eaaf4740cff9ca1ed86f9d552be65df1b2af76ceba61e9 SHA512 fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c +EBUILD libnest2d-0.4.ebuild 886 BLAKE2B 4fa60f8279f4bdbe3291ac835035a7ea577378907cc69db305393bd04515dd935a08cbe6978ab97c184baf63e1355027e1d26a45003687e22c92cefc194a7729 SHA512 6a6687807a9382fb2bfbb59c3535f78615167104f19251514bd008332cb556181b6cfead8cfc91a5dd28fab09f51c8c391ffed3be640a36208267c5be91b39d5 +MISC metadata.xml 1265 BLAKE2B fa154d4341887bd9da78aa8fcf10935187d6cd8570f27ca68a241322b8dffe56c8860638cc2c045d74646f3a22f49dd87b4c2620f2885b839c9fcb99c9a5aaa6 SHA512 0cf2a7b8a132a5b3510ceeb6dd7474c34e2e05a0de5a29157c73e533140194be91108450539f790124f716d3a8cebf320d0eada3cbabc2f7f8eb0f763d590184 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..c9896b772210 --- /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 ~arm64 ~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> |