#pragma once #include "../Types.h" #include "Geometry.h" #include #include namespace RTW { class Group : public Object { friend class World; public: Group() : Object(RTW_GROUP) {} ~Group() {} void Commit() override {} void SetObject(const std::string& id, Object *object) override { Object::SetObject(id, object); if(object && object->GetDataType() == RTW_DATA) { Data *data = reinterpret_cast(object); if(data->GetElementDataType() == RTW_GEOMETRIC_MODEL) { int numElements = data->GetNumElements(); Object **elemData = reinterpret_cast(data->GetData()); while(numElements-- > 0) { Object *elem = *elemData; assert(elem->GetDataType() == RTW_GEOMETRIC_MODEL); geometricModels.insert(reinterpret_cast(elem)); elemData++; } } } else if(object && object->GetDataType() == RTW_GEOMETRIC_MODEL) geometricModels.insert(reinterpret_cast(object)); } void RemoveParam(const std::string& id) override { Object *obj = GetObject({id}); if(obj && obj->GetDataType() == RTW_GEOMETRIC_MODEL) geometricModels.erase(reinterpret_cast(obj)); Object::RemoveParam(id); } private: std::set geometricModels; }; }