From 2784e6c38db0ded67e5938c587f0fc2dc814c2e0 Mon Sep 17 00:00:00 2001 From: Ralph Wessel Date: Thu, 14 Nov 2024 13:24:58 +0000 Subject: [PATCH] Connected structure and treads to stair class Removed hack for stair 3D body --- .../Speckle/Record/Element/ModelElement.cpp | 5 ---- SpeckleLib/Speckle/Record/Element/Stair.cpp | 29 +++++++++++++++++++ SpeckleLib/Speckle/Record/Element/Stair.h | 7 ++--- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/SpeckleLib/Speckle/Record/Element/ModelElement.cpp b/SpeckleLib/Speckle/Record/Element/ModelElement.cpp index 39721ef..dd33308 100644 --- a/SpeckleLib/Speckle/Record/Element/ModelElement.cpp +++ b/SpeckleLib/Speckle/Record/Element/ModelElement.cpp @@ -150,11 +150,6 @@ namespace { if (!memo) return partIDs; switch (typeID) { - case API_StairID: - getPartIDs(memo.root()->stairRisers, partIDs); - getPartIDs(memo.root()->stairTreads, partIDs); - getPartIDs(memo.root()->stairStructures, partIDs); - break; case API_RailingID: getPartIDs(memo.root()->railingSegments, partIDs); getPartIDs(memo.root()->railingPatterns, partIDs); diff --git a/SpeckleLib/Speckle/Record/Element/Stair.cpp b/SpeckleLib/Speckle/Record/Element/Stair.cpp index 925c568..09f2796 100644 --- a/SpeckleLib/Speckle/Record/Element/Stair.cpp +++ b/SpeckleLib/Speckle/Record/Element/Stair.cpp @@ -1,6 +1,9 @@ #include "Speckle/Record/Element/Stair.h" #include "Active/Serialise/Package/Wrapper/PackageWrap.h" +#include "Speckle/Record/Element/StairRiser.h" +#include "Speckle/Record/Element/StairStructure.h" +#include "Speckle/Record/Element/StairTread.h" using namespace active::serialise; using namespace speckle::record::attribute; @@ -31,11 +34,15 @@ namespace { ///Serialisation fields enum FieldIndex { riserID, + structStairID, + treadID, }; ///Serialisation field IDs static std::array fieldID = { Identity{"risers"}, + Identity{"structures"}, + Identity{"treads"}, }; } @@ -105,13 +112,23 @@ void Stair::loadMemo(filter_bits filter, std::unique_ptr& memo) const { //Establish the memo filter for this element if (!Risers::isMemoLoaded()) filter |= Risers::getPartFilter(); + if (!StructuredStair::isMemoLoaded()) + filter |= StructuredStair::getPartFilter(); + if (!Treads::isMemoLoaded()) + filter |= Treads::getPartFilter(); ModelElement::loadMemo(filter, memo); //Receive the memo data into the element (when available) if (memo) { if (filter & Risers::getPartFilter()) Risers::receive(*memo); + if (filter & StructuredStair::getPartFilter()) + StructuredStair::receive(*memo); + if (filter & Treads::getPartFilter()) + Treads::receive(*memo); } Risers::setMemoLoaded(true); //Always mark the data as loaded to prevent repeated attempts on error + StructuredStair::setMemoLoaded(true); //Always mark the data as loaded to prevent repeated attempts on error + Treads::setMemoLoaded(true); //Always mark the data as loaded to prevent repeated attempts on error } //Stair::loadMemo #endif @@ -128,6 +145,8 @@ bool Stair::fillInventory(Inventory& inventory) const { inventory.merge(Inventory{ { { fieldID[riserID], riserID, getRiserCount(), std::nullopt }, //TODO: implement other fields + { fieldID[structStairID], structStairID, getStructureCount(), std::nullopt }, //TODO: implement other fields + { fieldID[treadID], treadID, getTreadCount(), std::nullopt }, //TODO: implement other fields }, }.withType(&typeid(Stair))); return base::fillInventory(inventory); @@ -151,6 +170,16 @@ Cargo::Unique Stair::getCargo(const Inventory::Item& item) const { return Cargo::Unique{new PackageWrap{*riser}}; } else return nullptr; + case structStairID: + if (auto structure = getStructure(item.available); structure != nullptr) { + return Cargo::Unique{new PackageWrap{*structure}}; + } else + return nullptr; + case treadID: + if (auto tread = getTread(item.available); tread != nullptr) { + return Cargo::Unique{new PackageWrap{*tread}}; + } else + return nullptr; default: return nullptr; //Requested an unknown index } diff --git a/SpeckleLib/Speckle/Record/Element/Stair.h b/SpeckleLib/Speckle/Record/Element/Stair.h index 8bd992c..74cd871 100644 --- a/SpeckleLib/Speckle/Record/Element/Stair.h +++ b/SpeckleLib/Speckle/Record/Element/Stair.h @@ -1,19 +1,18 @@ #ifndef SPECKLE_RECORD_ELEMENT_STAIR #define SPECKLE_RECORD_ELEMENT_STAIR -#include "Speckle/Record/Element/StairRiser.h" #include "Speckle/Record/Element/ModelElement.h" #include "Speckle/Record/Element/Interface/Assembly/Path.h" #include "Speckle/Record/Element/Interface/Risers.h" +#include "Speckle/Record/Element/Interface/StructuredStair.h" +#include "Speckle/Record/Element/Interface/Treads.h" namespace speckle::record::element { - class StairRiser; - /*! BIM stair class */ - class Stair : public ModelElement, public Risers { + class Stair : public ModelElement, public Risers, public StructuredStair, public Treads { public: // MARK: - Types