diff --git a/GUI/Model/Sample/CompoundItem.cpp b/GUI/Model/Sample/CompoundItem.cpp index 8ff804c8eb9b77fa13fdb0051f192e3250077bce..8fd3c9809104aabbe85dc2150e6fbf2ddceb6dae 100644 --- a/GUI/Model/Sample/CompoundItem.cpp +++ b/GUI/Model/Sample/CompoundItem.cpp @@ -14,6 +14,7 @@ #include "GUI/Model/Sample/CompoundItem.h" #include "Base/Util/Assert.h" +#include "Base/Util/Vec.h" #include "GUI/Model/Sample/CoreAndShellItem.h" #include "GUI/Model/Sample/MesocrystalItem.h" #include "GUI/Model/Sample/ParticleItem.h" @@ -147,10 +148,12 @@ std::vector<ItemWithParticles*> CompoundItem::itemsWithParticles() const return result; } -QVector<ItemWithParticles*> CompoundItem::containedItemsWithParticles() const +std::vector<ItemWithParticles*> CompoundItem::containedItemsWithParticles() const { - QVector<ItemWithParticles*> result; - for (const auto& sel : m_particles) - result << sel.certainItem() << sel.certainItem()->containedItemsWithParticles(); + std::vector<ItemWithParticles*> result; + for (const auto& sel : m_particles) { + result.push_back(sel.certainItem()); + Vec::concat(result, sel.certainItem()->containedItemsWithParticles()); + } return result; } diff --git a/GUI/Model/Sample/CompoundItem.h b/GUI/Model/Sample/CompoundItem.h index bf0197cf810c939da4bdc40c84af6f2088e32a93..5b4cbfa97da79a8e1f52eb336604ef27fe2bf4b4 100644 --- a/GUI/Model/Sample/CompoundItem.h +++ b/GUI/Model/Sample/CompoundItem.h @@ -37,7 +37,7 @@ public: std::unique_ptr<Compound> createCompound() const; std::vector<ItemWithParticles*> itemsWithParticles() const; - QVector<ItemWithParticles*> containedItemsWithParticles() const override; + std::vector<ItemWithParticles*> containedItemsWithParticles() const override; bool expandCompound = true; diff --git a/GUI/Model/Sample/CoreAndShellItem.cpp b/GUI/Model/Sample/CoreAndShellItem.cpp index da692bd35d8cf242d720adfa348cc95e014541c4..edd64826e7a8a5e2f2cb99815a4ab10e8a0675d1 100644 --- a/GUI/Model/Sample/CoreAndShellItem.cpp +++ b/GUI/Model/Sample/CoreAndShellItem.cpp @@ -14,6 +14,7 @@ #include "GUI/Model/Sample/CoreAndShellItem.h" #include "Base/Util/Assert.h" +#include "Base/Util/Vec.h" #include "GUI/Model/Material/MaterialsSet.h" #include "GUI/Model/Sample/ParticleItem.h" #include "Sample/Particle/CoreAndShell.h" @@ -174,12 +175,17 @@ ParticleItem* CoreAndShellItem::createShellItem(const MaterialsSet* materials) return m_shell.get(); } -QVector<ItemWithParticles*> CoreAndShellItem::containedItemsWithParticles() const +std::vector<ItemWithParticles*> CoreAndShellItem::containedItemsWithParticles() const { - QVector<ItemWithParticles*> result; - if (coreItem()) - result << coreItem() << coreItem()->containedItemsWithParticles(); - if (shellItem()) - result << shellItem() << shellItem()->containedItemsWithParticles(); + std::vector<ItemWithParticles*> result; + if (coreItem()) { + result.push_back(coreItem()); + Vec::concat(result, coreItem()->containedItemsWithParticles()); + } + if (shellItem()) { + result.push_back(shellItem()); + Vec::concat(result, shellItem()->containedItemsWithParticles()); + } + return result; } diff --git a/GUI/Model/Sample/CoreAndShellItem.h b/GUI/Model/Sample/CoreAndShellItem.h index 3dd0a74b5951c18670121c3b5de5d9b0bb1e1573..59aa98b2ed9dc4df18ab8049db2628d9e914969c 100644 --- a/GUI/Model/Sample/CoreAndShellItem.h +++ b/GUI/Model/Sample/CoreAndShellItem.h @@ -37,7 +37,7 @@ public: ParticleItem* shellItem() const; ParticleItem* createShellItem(const MaterialsSet* materials); - QVector<ItemWithParticles*> containedItemsWithParticles() const override; + std::vector<ItemWithParticles*> containedItemsWithParticles() const override; bool expandMain = true; bool expandCore = true; diff --git a/GUI/Model/Sample/ItemWithParticles.h b/GUI/Model/Sample/ItemWithParticles.h index e305867673451e0f5866a08faf9092ee871abe72..e72065633de2706fefcd5191722c7d65e8bfdbb7 100644 --- a/GUI/Model/Sample/ItemWithParticles.h +++ b/GUI/Model/Sample/ItemWithParticles.h @@ -44,10 +44,8 @@ public: //! nullptr only if "no rotation". Can contain identity! std::unique_ptr<IRotation> createRotation() const; - //! Return full hierarchical contained items with particles. - //! - //! For example CompoundItem contains other items, ParticleItem doesn't. - virtual QVector<ItemWithParticles*> containedItemsWithParticles() const = 0; + //! Returns particles contained at any sublevel (recursive). + virtual std::vector<ItemWithParticles*> containedItemsWithParticles() const = 0; virtual void writeTo(QXmlStreamWriter* w) const; virtual void readFrom(QXmlStreamReader* r); diff --git a/GUI/Model/Sample/LayerItem.cpp b/GUI/Model/Sample/LayerItem.cpp index 95c6a7e4a0467281c894951abf3a2705a69921e8..8262e25b4cbaa64f0bb9009279de571c90f516e4 100644 --- a/GUI/Model/Sample/LayerItem.cpp +++ b/GUI/Model/Sample/LayerItem.cpp @@ -89,11 +89,11 @@ QVector<ItemWithMaterial*> LayerItem::itemsWithMaterial() return result; } -QVector<ItemWithParticles*> LayerItem::itemsWithParticles() const +std::vector<ItemWithParticles*> LayerItem::itemsWithParticles() const { - QVector<ItemWithParticles*> result; + std::vector<ItemWithParticles*> result; for (auto* layout : layoutItems()) - result << layout->containedItemsWithParticles(); + Vec::concat(result, layout->containedItemsWithParticles()); return result; } diff --git a/GUI/Model/Sample/LayerItem.h b/GUI/Model/Sample/LayerItem.h index 91e257bad3673902f4565d81a87239d0f9f4bf98..6849f4d169ed4f4fab20aca44bb3f3349089f33b 100644 --- a/GUI/Model/Sample/LayerItem.h +++ b/GUI/Model/Sample/LayerItem.h @@ -36,7 +36,7 @@ public: void setLayerName(const QString& n) { m_name = n; } QVector<ItemWithMaterial*> itemsWithMaterial(); - QVector<ItemWithParticles*> itemsWithParticles() const; + std::vector<ItemWithParticles*> itemsWithParticles() const; DoubleProperty& thickness() { return m_thickness; } const DoubleProperty& thickness() const { return m_thickness; } diff --git a/GUI/Model/Sample/MesocrystalItem.cpp b/GUI/Model/Sample/MesocrystalItem.cpp index 6835bedf0fd87ba36bbe13011c4b047aaab71332..1c31aaec6ca51286102c6497d66007230e78fe84 100644 --- a/GUI/Model/Sample/MesocrystalItem.cpp +++ b/GUI/Model/Sample/MesocrystalItem.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/Model/Sample/MesocrystalItem.h" +#include "Base/Util/Vec.h" #include "GUI/Model/Sample/CompoundItem.h" #include "GUI/Model/Sample/CoreAndShellItem.h" #include "GUI/Model/Sample/ParticleItem.h" @@ -200,10 +201,12 @@ std::unique_ptr<IFormFactor> MesocrystalItem::getOuterShape() const return m_outer_shape->createFormFactor(); } -QVector<ItemWithParticles*> MesocrystalItem::containedItemsWithParticles() const +std::vector<ItemWithParticles*> MesocrystalItem::containedItemsWithParticles() const { - QVector<ItemWithParticles*> result; - if (basisItem()) - result << basisItem() << basisItem()->containedItemsWithParticles(); + std::vector<ItemWithParticles*> result; + if (basisItem()) { + result.push_back(basisItem()); + Vec::concat(result, basisItem()->containedItemsWithParticles()); + } return result; } diff --git a/GUI/Model/Sample/MesocrystalItem.h b/GUI/Model/Sample/MesocrystalItem.h index c57e93c3a2c51c415ca533b8f07f935d21b8226d..d02b3f435d457004be99f63493459b22f2d9315a 100644 --- a/GUI/Model/Sample/MesocrystalItem.h +++ b/GUI/Model/Sample/MesocrystalItem.h @@ -62,7 +62,7 @@ public: const VectorProperty& vectorC() const { return m_vectorC; } void setVectorC(const R3& v) { m_vectorC.setR3(v); } - QVector<ItemWithParticles*> containedItemsWithParticles() const override; + std::vector<ItemWithParticles*> containedItemsWithParticles() const override; bool expandMesocrystal = true; diff --git a/GUI/Model/Sample/ParticleItem.cpp b/GUI/Model/Sample/ParticleItem.cpp index 20c5f78433f327b7603fe76bdcf2d16ee314fb3d..2986946edd7279a39615e156f48c43e7f8be8fd9 100644 --- a/GUI/Model/Sample/ParticleItem.cpp +++ b/GUI/Model/Sample/ParticleItem.cpp @@ -124,8 +124,3 @@ FormFactorItem* ParticleItem::formFactorItem() const { return m_form_factor.certainItem(); } - -QVector<ItemWithParticles*> ParticleItem::containedItemsWithParticles() const -{ - return {}; -} diff --git a/GUI/Model/Sample/ParticleItem.h b/GUI/Model/Sample/ParticleItem.h index 83061ef786f2d0afdddb2513dfd3dd68d779ea63..1d757fe7ad59afbec0df67df3474a0290c1cab18 100644 --- a/GUI/Model/Sample/ParticleItem.h +++ b/GUI/Model/Sample/ParticleItem.h @@ -36,7 +36,7 @@ public: template <typename T> T* setFormFactorItemType(); void setFormFactor(FormFactorItem* p); FormFactorItem* formFactorItem() const; - QVector<ItemWithParticles*> containedItemsWithParticles() const override; + std::vector<ItemWithParticles*> containedItemsWithParticles() const override { return {}; } bool expandParticle = true; diff --git a/GUI/Model/Sample/ParticleLayoutItem.cpp b/GUI/Model/Sample/ParticleLayoutItem.cpp index 43eb30b3fb8a56ecb88b1e8acc217bdc4d0c00be..9384bdfa80bcbe52383203a60bbb2fd3f4840720 100644 --- a/GUI/Model/Sample/ParticleLayoutItem.cpp +++ b/GUI/Model/Sample/ParticleLayoutItem.cpp @@ -14,6 +14,7 @@ #include "GUI/Model/Sample/ParticleLayoutItem.h" #include "Base/Util/Assert.h" +#include "Base/Util/Vec.h" #include "GUI/Model/Sample/CompoundItem.h" #include "GUI/Model/Sample/Lattice2DItems.h" #include "GUI/Model/Sample/MesocrystalItem.h" @@ -76,11 +77,13 @@ std::vector<ItemWithParticles*> ParticleLayoutItem::itemsWithParticles() const return result; } -QVector<ItemWithParticles*> ParticleLayoutItem::containedItemsWithParticles() const +std::vector<ItemWithParticles*> ParticleLayoutItem::containedItemsWithParticles() const { - QVector<ItemWithParticles*> result; - for (const auto& sel : m_particles) - result << sel.certainItem() << sel.certainItem()->containedItemsWithParticles(); + std::vector<ItemWithParticles*> result; + for (const auto& sel : m_particles) { + result.push_back(sel.certainItem()); + Vec::concat(result, sel.certainItem()->containedItemsWithParticles()); + } return result; } diff --git a/GUI/Model/Sample/ParticleLayoutItem.h b/GUI/Model/Sample/ParticleLayoutItem.h index 79478555f9d48f0e9daacca3df46e87c5ae828ee..d05107b6d71d3f40cd99bfdceb77907a59c6e02b 100644 --- a/GUI/Model/Sample/ParticleLayoutItem.h +++ b/GUI/Model/Sample/ParticleLayoutItem.h @@ -49,7 +49,7 @@ public: std::vector<ItemWithParticles*> itemsWithParticles() const; //! Return particles contained at any level (recursive). - QVector<ItemWithParticles*> containedItemsWithParticles() const; + std::vector<ItemWithParticles*> containedItemsWithParticles() const; void addItemWithParticleSelection(ItemWithParticles* particle); void removeItemWithParticle(ItemWithParticles* particle); diff --git a/GUI/View/Views/SampleView.cpp b/GUI/View/Views/SampleView.cpp index 667e295d03fa94dfa5235e5925c7d39e56bec00c..e40aa9ca77fa444b81ede86ce046a398e89f0c4e 100644 --- a/GUI/View/Views/SampleView.cpp +++ b/GUI/View/Views/SampleView.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/View/Views/SampleView.h" +#include "Base/Util/Vec.h" #include "GUI/Model/Project/ProjectDocument.h" #include "GUI/Model/Sample/ItemWithParticles.h" #include "GUI/Model/Sample/LayerItem.h" @@ -177,15 +178,16 @@ void SampleView::onAboutToRemoveItem(Item3D* item) } else if (auto* i = dynamic_cast<LayerItem*>(item)) { if (item == widget->displayedItem() || i->layoutItems().contains(displayed) - || i->itemsWithParticles().contains(displayed)) + || Vec::containsPtr(displayed, i->itemsWithParticles())) widget->resetScene(); } else if (auto* i = dynamic_cast<ParticleLayoutItem*>(item)) { - if (item == widget->displayedItem() || i->containedItemsWithParticles().contains(displayed)) + if (item == widget->displayedItem() + || Vec::containsPtr(displayed, i->containedItemsWithParticles())) widget->resetScene(); } else if (auto* i = dynamic_cast<ItemWithParticles*>(item)) { - if (item == displayed || i->containedItemsWithParticles().contains(displayed)) + if (item == displayed || Vec::containsPtr(displayed, i->containedItemsWithParticles())) widget->resetScene(); } }