Connected structure and treads to stair class

Removed hack for stair 3D body
This commit is contained in:
Ralph Wessel
2024-11-14 13:24:58 +00:00
parent 90e133b03e
commit 2784e6c38d
3 changed files with 32 additions and 9 deletions
@@ -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);
@@ -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>& 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
}
+3 -4
View File
@@ -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