// Copyright (c) 2020 GeometryFactory (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL$ // $Id$ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Simon Giraudot #ifndef CGAL_ORTHTREE_TRAITS_3_H #define CGAL_ORTHTREE_TRAITS_3_H #include namespace CGAL { /*! \ingroup PkgOrthtreeTraits The class `Orthtree_traits_2` can be used as a template parameter of the `Orthtree` class. \tparam GeomTraits model of `Kernel`. \cgalModels OrthtreeTraits \sa Quadtree \sa Orthtree_traits_3 \sa Orthtree_traits_d */ template struct Orthtree_traits_2 { public: /// \name Types /// @{ typedef Dimension_tag<2> Dimension; ///< Dimension type. typedef Bbox_2 Bbox_d; ///< Bounding box type. typedef typename GeomTraits::FT FT; /// Number type. typedef typename GeomTraits::Point_2 Point_d; ///< Point type. typedef typename GeomTraits::Circle_2 Sphere_d; ///< Sphere type. typedef typename GeomTraits::Cartesian_const_iterator_2 Cartesian_const_iterator_d; ///< An iterator over the %Cartesian coordinates. typedef std::array Array; ///< Array type. /*! * \brief two directions along each axis in cartesian space, relative to a node * * Directions are mapped to numbers as 2-bit integers * * The first bit indicates the axis (0 = x, 1 = y), * the second bit indicates the direction along that axis (0 = -, 1 = +). * * The following diagram may be a useful reference: * * 3 * * | * | y+ * | * * 0 *------+------* 1 | * | | * | +-----* x+ * | * * 2 * * This lookup table may also be helpful: * * | Direction | bitset | number | Enum | * | --------- | ------ | ------ | ----- | * | `-x` | 00 | 0 | LEFT | * | `+x` | 01 | 1 | RIGHT | * | `-y` | 10 | 2 | DOWN | * | `+y` | 11 | 3 | UP | */ enum Adjacency { LEFT, RIGHT, DOWN, UP }; #ifdef DOXYGEN_RUNNING /*! Functor with an operator to construct a `Point_d` from an `Array` object. */ typedef unspecified_type Construct_point_d_from_array; #else struct Construct_point_d_from_array { Point_d operator() (const Array& array) const { return Point_d (array[0], array[1]); } }; #endif #ifdef DOXYGEN_RUNNING /*! Functor with an operator to construct a `Bbox_d` from two `Point_d` object (minimum and maximum points). */ typedef unspecified_type Construct_bbox_d; #else struct Construct_bbox_d { Bbox_d operator() (const Array& min, const Array& max) const { return Bbox_d (min[0], min[1], max[0], max[1]); } }; #endif /// @} /// \name Operations /// @{ /*! Function used to construct an object of type `Construct_point_d_from_array`. */ Construct_point_d_from_array construct_point_d_from_array_object() const { return Construct_point_d_from_array(); } /*! Function used to construct an object of type `Construct_bbox_d`. */ Construct_bbox_d construct_bbox_d_object() const { return Construct_bbox_d(); } /// @} }; } #endif // CGAL_ORTHTREE_TRAITS_2_H