Connected structure and treads to stair class
Removed hack for stair 3D body
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user