#ifndef FESA_ELEMENTS_ELEMENT_DEFINITION_H_ #define FESA_ELEMENTS_ELEMENT_DEFINITION_H_ #include #include #include "fesa/core/source_identity.h" namespace fesa { /// @brief Identifies the supported semantic element-definition kinds. enum class ElementDefinitionKind { kEulerBeam3D, kMitc4Shell }; /// @brief Provides immutable source identity and topology for one element. /// @note Numerical stiffness, recovery, and equation ids are intentionally /// excluded from this semantic interface. class ElementDefinition { public: virtual ~ElementDefinition() = default; /// @brief Returns the concrete semantic definition kind. virtual ElementDefinitionKind Kind() const noexcept = 0; /// @brief Returns the stable external source identity. virtual const SourceEntityId& SourceId() const noexcept = 0; /// @brief Returns the preserved source element type such as B33 or S4R. virtual std::string_view SourceElementType() const noexcept = 0; /// @brief Returns stable Domain node collection positions. virtual const std::vector& NodeIndices() const noexcept = 0; /// @brief Returns the stable Domain material collection position. virtual EntityIndex MaterialIndex() const noexcept = 0; /// @brief Returns the stable Domain property collection position. virtual EntityIndex PropertyIndex() const noexcept = 0; }; } // namespace fesa #endif // FESA_ELEMENTS_ELEMENT_DEFINITION_H_