#ifndef FESA_PROPERTIES_SHELL_SECTION_H_ #define FESA_PROPERTIES_SHELL_SECTION_H_ #include #include "fesa/core/status.h" #include "fesa/properties/element_property.h" namespace fesa { /// @brief Stores a centered constant-thickness shell section assignment. class ShellSection final : public ElementProperty { public: /// @brief Creates a validated shell section. /// @param thickness Positive thickness in the active consistent unit system. /// @param material_index Stable Domain material collection position. /// @return A section or a structured model failure. static Result Create(SourceEntityId source_id, std::string name, double thickness, EntityIndex material_index, SourceLocation location); /// @brief Constructs an already validated parser-owned shell record. /// @note This compatibility seam preserves current consumers until Domain /// polymorphic ownership is migrated. ShellSection(std::string name, double thickness, EntityIndex material_index, SourceLocation location); ElementPropertyKind Kind() const noexcept override; const SourceEntityId& SourceId() const noexcept override; const SourceLocation& Location() const noexcept override; /// @brief Returns the source shell-section name. const std::string& Name() const noexcept; /// @brief Returns centered shell thickness. double Thickness() const noexcept; /// @brief Returns the stable Domain material collection position. EntityIndex MaterialIndex() const noexcept; // Public storage preserves the current semantic-record API until Domain // ownership migrates in the next approved Step. std::string name; double thickness; EntityIndex material_index; SourceLocation location; private: /// @brief Constructs a candidate whose fields have already been checked. ShellSection(SourceEntityId source_id, std::string name, double thickness, EntityIndex material_index, SourceLocation location); SourceEntityId source_id_; }; } // namespace fesa #endif // FESA_PROPERTIES_SHELL_SECTION_H_