diff --git a/ProcessLib/SpatialPosition.h b/ProcessLib/SpatialPosition.h new file mode 100644 index 0000000000000000000000000000000000000000..fb5b2116ad0fe02997592276e77980837fabb502 --- /dev/null +++ b/ProcessLib/SpatialPosition.h @@ -0,0 +1,86 @@ +/** + * \copyright + * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#ifndef PROCESSLIB_SPATIALPOSITION_H +#define PROCESSLIB_SPATIALPOSITION_H + +#include <boost/optional.hpp> +#include "MathLib/TemplatePoint.h" + +namespace ProcessLib +{ +class SpatialPosition +{ +public: + boost::optional<std::size_t> getNodeID() const { return _node_id; } + boost::optional<std::size_t> getElementID() const { return _element_id; } + boost::optional<unsigned> getIntegrationPoint() const + { + return _integration_point; + } + boost::optional<MathLib::TemplatePoint<double, 3>> const& getCoordinates() + const + { + return _coordinates; + } + + void setNodeID(std::size_t node_id) + { + clear(); + _node_id = node_id; + } + + void setElementID(std::size_t element_id) + { + clear(); + _element_id = element_id; + } + + void setIntegrationPoint(unsigned integration_point) + { + assert(_element_id); + _integration_point = integration_point; + } + + void setCoordinates(MathLib::TemplatePoint<double, 3> const& coordinates) + { + clear(); + _coordinates = coordinates; + } + + void setAll( + boost::optional<std::size_t> const& node_id, + boost::optional<std::size_t> const& element_id, + boost::optional<unsigned> const& integration_point, + boost::optional<MathLib::TemplatePoint<double, 3>> const& coordinates) + { + _node_id = node_id; + _element_id = element_id; + _integration_point = integration_point; + _coordinates = coordinates; + } + + void clear() + { + _node_id = boost::none; + _element_id = boost::none; + _integration_point = boost::none; + _coordinates = boost::none; + } + +private: + boost::optional<std::size_t> _node_id; + boost::optional<std::size_t> _element_id; + boost::optional<unsigned> _integration_point; + boost::optional<MathLib::TemplatePoint<double, 3>> _coordinates; +}; + +} // ProcessLib + +#endif // PROCESSLIB_SPATIALPOSITION_H