From 183afab8e72d4fa48d84fc174cf3d80bac232738 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 26 Jul 2023 16:15:14 +0200 Subject: [PATCH] SimpleArrangeItem now usable with arrange tasks For future comparisons and measurements --- src/libslic3r/Arrange/ArrangeImpl.hpp | 8 +++-- .../Arrange/Items/SimpleArrangeItem.cpp | 9 ++++++ .../Arrange/Items/SimpleArrangeItem.hpp | 30 +++++++++++++++++++ .../Arrange/Items/WritableItemTraits.hpp | 2 +- 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Arrange/ArrangeImpl.hpp b/src/libslic3r/Arrange/ArrangeImpl.hpp index 57e9e1f358..0e7b30f6e5 100644 --- a/src/libslic3r/Arrange/ArrangeImpl.hpp +++ b/src/libslic3r/Arrange/ArrangeImpl.hpp @@ -123,7 +123,7 @@ void arrange(SelectionStrategy &&selstrategy, d += corr; for (auto &itm : items) - if (itm.bed_idx() == static_cast(bedidx) && !is_wipe_tower(itm)) + if (get_bed_index(itm) == static_cast(bedidx) && !is_wipe_tower(itm)) translate(itm, d); } } @@ -386,7 +386,8 @@ ArrItem ConvexItemConverter::convert(const Arrangeable &arrbl, set_priority(ret, arrbl.priority()); imbue_id(ret, arrbl.id()); - arrbl.imbue_data(AnyWritableDataStore{ret}); + if constexpr (IsWritableDataStore) + arrbl.imbue_data(AnyWritableDataStore{ret}); return ret; } @@ -401,7 +402,8 @@ ArrItem AdvancedItemConverter::convert(const Arrangeable &arrbl, set_bed_index(ret, bed_index); set_priority(ret, arrbl.priority()); imbue_id(ret, arrbl.id()); - arrbl.imbue_data(AnyWritableDataStore{ret}); + if constexpr (IsWritableDataStore) + arrbl.imbue_data(AnyWritableDataStore{ret}); return ret; } diff --git a/src/libslic3r/Arrange/Items/SimpleArrangeItem.cpp b/src/libslic3r/Arrange/Items/SimpleArrangeItem.cpp index 75ab1cf423..2e96290a4c 100644 --- a/src/libslic3r/Arrange/Items/SimpleArrangeItem.cpp +++ b/src/libslic3r/Arrange/Items/SimpleArrangeItem.cpp @@ -1,5 +1,8 @@ #include "SimpleArrangeItem.hpp" #include "libslic3r/Arrange/ArrangeImpl.hpp" +#include "libslic3r/Arrange/Tasks/ArrangeTaskImpl.hpp" +#include "libslic3r/Arrange/Tasks/FillBedTaskImpl.hpp" +#include "libslic3r/Arrange/Tasks/MultiplySelectionTaskImpl.hpp" namespace Slic3r { namespace arr2 { @@ -12,4 +15,10 @@ Polygon SimpleArrangeItem::outline() const return ret; } +template class ArrangeableToItemConverter; +template struct ArrangeTask; +template struct FillBedTask; +template struct MultiplySelectionTask; +template class Arranger; + }} // namespace Slic3r::arr2 diff --git a/src/libslic3r/Arrange/Items/SimpleArrangeItem.hpp b/src/libslic3r/Arrange/Items/SimpleArrangeItem.hpp index 54d7866ba1..f097ca7619 100644 --- a/src/libslic3r/Arrange/Items/SimpleArrangeItem.hpp +++ b/src/libslic3r/Arrange/Items/SimpleArrangeItem.hpp @@ -7,6 +7,9 @@ #include "libslic3r/Arrange/Core/NFP/NFP.hpp" #include "libslic3r/Arrange/Arrange.hpp" +#include "libslic3r/Arrange/Tasks/ArrangeTask.hpp" +#include "libslic3r/Arrange/Tasks/FillBedTask.hpp" +#include "libslic3r/Arrange/Tasks/MultiplySelectionTask.hpp" #include "libslic3r/Polygon.hpp" #include "libslic3r/Geometry/ConvexHull.hpp" @@ -24,6 +27,7 @@ class SimpleArrangeItem { int m_bed_idx = Unarranged; std::vector m_allowed_rotations = {0.}; + ObjectID m_obj_id; public: explicit SimpleArrangeItem(Polygon chull = {}): m_shape{std::move(chull)} {} @@ -52,6 +56,9 @@ public: { m_allowed_rotations = std::move(rots); } + + void set_object_id(const ObjectID &id) noexcept { m_obj_id = id; } + const ObjectID & get_object_id() const noexcept { return m_obj_id; } }; template<> struct NFPArrangeItemTraits_ @@ -183,6 +190,29 @@ struct WritableItemTraits_ { } }; +template<> struct ImbueableItemTraits_ +{ + static void imbue_id(SimpleArrangeItem &itm, const ObjectID &id) + { + itm.set_object_id(id); + } + + static std::optional retrieve_id(const SimpleArrangeItem &itm) + { + std::optional ret; + if (itm.get_object_id().valid()) + ret = itm.get_object_id(); + + return ret; + } +}; + +extern template class ArrangeableToItemConverter; +extern template struct ArrangeTask; +extern template struct FillBedTask; +extern template struct MultiplySelectionTask; +extern template class Arranger; + }} // namespace Slic3r::arr2 #endif // SIMPLEARRANGEITEM_HPP diff --git a/src/libslic3r/Arrange/Items/WritableItemTraits.hpp b/src/libslic3r/Arrange/Items/WritableItemTraits.hpp index f80f449730..552564dcfe 100644 --- a/src/libslic3r/Arrange/Items/WritableItemTraits.hpp +++ b/src/libslic3r/Arrange/Items/WritableItemTraits.hpp @@ -96,7 +96,7 @@ void set_arbitrary_data(Itm &itm, const std::string &key, T &&data) template void set_allowed_rotations(Itm &itm, const std::vector &rotations) { - WritableItemTraits::set_arbitrary_data(itm, "rotations", rotations); + WritableItemTraits::set_allowed_rotations(itm, rotations); } template int raise_priority(ArrItem &itm)