diff --git a/MeshLib/Properties-impl.h b/MeshLib/Properties-impl.h index ba0dcafd9bb81922f7aa58a8d7093172d1f578c5..fbde93ac70fb5105746257a4a1819310a3da919b 100644 --- a/MeshLib/Properties-impl.h +++ b/MeshLib/Properties-impl.h @@ -147,6 +147,23 @@ PropertyVector<T>* Properties::getPropertyVector(std::string_view name) return dynamic_cast<PropertyVector<T>*>(it->second); } +template <typename T> +bool Properties::hasPropertyVector(std::string const& name, + MeshItemType const item_type) const +{ + auto const it = _properties.find(name); + + if (it == _properties.end()) + { + return false; + } + + auto property = dynamic_cast<PropertyVector<T>*>(it->second); + + return (property == nullptr) ? false + : property->getMeshItemType() == item_type; +} + template <typename T> PropertyVector<T> const* Properties::getPropertyVector( std::string_view name, MeshItemType const item_type, diff --git a/MeshLib/Properties.h b/MeshLib/Properties.h index 94043d16e1589c1cf4415ff7eb0c3148de29261d..5412c2421b9ca1657624211191d37acdc03bda50 100644 --- a/MeshLib/Properties.h +++ b/MeshLib/Properties.h @@ -123,6 +123,14 @@ public: /// @param name the name of the property (for instance porosity) bool hasPropertyVector(std::string_view name) const; + /// Check if a PropertyVector accessible by the name and by the item type + /// is already stored within the Properties object. + /// @param name the name of the property, e.g. porosity. + /// @param item_type the type of mesh entity, e.g. CELL. + template <typename T> + bool hasPropertyVector(std::string const& name, + MeshItemType const item_type) const; + std::vector<std::string> getPropertyVectorNames() const; std::vector<std::string> getPropertyVectorNames( MeshLib::MeshItemType t) const;