// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2020 Digvijay Janartha, Hamirpur, India. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_GEOMETRIES_POINT_XYZ_HPP #define BOOST_GEOMETRY_GEOMETRIES_POINT_XYZ_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { namespace d3 { /*! \brief 3D point in Cartesian coordinate system \tparam CoordinateType numeric type, for example, double, float, int \tparam CoordinateSystem coordinate system, defaults to cs::cartesian \qbk{[include reference/geometries/point_xyz.qbk]} \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_point Point Concept] } \qbk{[include reference/geometries/point_assign_warning.qbk]} */ template class point_xyz : public model::point { public: #ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS /// \constructor_default_no_init point_xyz() = default; #else /// \constructor_default_no_init inline point_xyz() {} #endif /// Constructor with x/y/z values inline point_xyz(CoordinateType const& x, CoordinateType const& y, CoordinateType const& z) : model::point(x, y, z) {} /// Get x-value inline CoordinateType const& x() const { return this->template get<0>(); } /// Get y-value inline CoordinateType const& y() const { return this->template get<1>(); } /// Get z-value inline CoordinateType const& z() const { return this->template get<2>(); } /// Set x-value inline void x(CoordinateType const& v) { this->template set<0>(v); } /// Set y-value inline void y(CoordinateType const& v) { this->template set<1>(v); } /// Set z-value inline void z(CoordinateType const& v) { this->template set<2>(v); } }; }} // namespace model::d3 // Adapt the point_xyz to the concept #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef point_tag type; }; template struct coordinate_type > { typedef CoordinateType type; }; template struct coordinate_system > { typedef CoordinateSystem type; }; template struct dimension > : boost::mpl::int_<3> {}; template struct access, Dimension > { static inline CoordinateType get( model::d3::point_xyz const& p) { return p.template get(); } static inline void set(model::d3::point_xyz& p, CoordinateType const& value) { p.template set(value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_XYZ_HPP