commit:     7a67b46fa6e5dda158561b25b61129f4a282536a
Author:     Dennis Lamm <expeditioneer <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 29 15:09:41 2020 +0000
Commit:     Dennis Lamm <expeditioneer <AT> gentoo <DOT> org>
CommitDate: Mon Nov 30 18:37:41 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7a67b46f

dev-libs/libnest2d: added new ebuild

Signed-off-by: Dennis Lamm <expeditoneer <AT> gentoo.org>
Signed-off-by: Dennis Lamm <expeditioneer <AT> gentoo.org>

 dev-libs/libnest2d/Manifest                        |   1 +
 .../files/libnest2d-0.4-add-disallowed-areas.patch | 122 +++++++++++++++++++++
 dev-libs/libnest2d/libnest2d-0.4.ebuild            |  39 +++++++
 dev-libs/libnest2d/metadata.xml                    |  23 ++++
 4 files changed, 185 insertions(+)

diff --git a/dev-libs/libnest2d/Manifest b/dev-libs/libnest2d/Manifest
new file mode 100644
index 00000000000..c11b486d54e
--- /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 00000000000..ed48cd3eeff
--- /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 <[email protected]>
+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 <[email protected]>
+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 <[email protected]>
+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 00000000000..6a9a278110f
--- /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 00000000000..a80bd99b8c2
--- /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>[email protected]</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>

Reply via email to