// Copyright (c) 2004 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.2/Triangulation_3/include/CGAL/Regular_triangulation_cell_base_3.h $ // $Id: Regular_triangulation_cell_base_3.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Christophe Delage // cell of a triangulation of any dimension <=3 // with hidden points (for the regular triangulation) #ifndef CGAL_REGULAR_TRIANGULATION_CELL_BASE_3_H #define CGAL_REGULAR_TRIANGULATION_CELL_BASE_3_H #include #include #include #include #include #include #include namespace CGAL { template < typename GT, typename Cb = Triangulation_cell_base_3, typename Memory_policy = Keep_hidden_points, typename C = std::list > class Regular_triangulation_cell_base_3 : public Cb { public: typedef typename Cb::Vertex_handle Vertex_handle; typedef typename Cb::Cell_handle Cell_handle; typedef GT Geom_traits; typedef typename Geom_traits::Point_3 Point_3; typedef typename Geom_traits::Weighted_point_3 Point; typedef C Point_container; typedef typename Point_container::iterator Point_iterator; typedef typename Point_container::const_iterator Point_const_iterator; template < typename TDS2 > struct Rebind_TDS { typedef typename Cb::template Rebind_TDS::Other Cb2; typedef Regular_triangulation_cell_base_3 Other; }; Regular_triangulation_cell_base_3() : Cb() {} Regular_triangulation_cell_base_3(Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3) : Cb(v0, v1, v2, v3) {} Regular_triangulation_cell_base_3(Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3, Cell_handle n0, Cell_handle n1, Cell_handle n2, Cell_handle n3) : Cb(v0, v1, v2, v3, n0, n1, n2, n3) {} // because we can't use default templates in ansi... Point_iterator hidden_points_begin() { return hidden_points_begin_internal(); } Point_iterator hidden_points_end() { return hidden_points_end_internal(); } // const versions Point_const_iterator hidden_points_begin() const { return hidden_points_begin_internal(); } Point_const_iterator hidden_points_end() const { return hidden_points_end_internal(); } const C& hidden_points() const { return _hidden; } void hide_point(const Point& p) { hide_point_internal(p); } void unhide_point(const Point_iterator pit) { unhide_point_internal(pit); } // Memory_policy is Tag_true ------------------------------------------------- template Point_iterator hidden_points_begin_internal(typename boost::enable_if_c::type* = nullptr) { return _hidden.begin(); } template Point_iterator hidden_points_end_internal(typename boost::enable_if_c::type* = nullptr) { return _hidden.end(); } template Point_const_iterator hidden_points_begin_internal(typename boost::enable_if_c::type* = nullptr) const { return _hidden.begin(); } template Point_const_iterator hidden_points_end_internal(typename boost::enable_if_c::type* = nullptr) const { return _hidden.end(); } template void hide_point_internal(const Point& p, typename boost::enable_if_c::type* = nullptr) { _hidden.push_back(p); } template void unhide_point_internal(const Point_iterator pit, typename boost::enable_if_c::type* = nullptr) { _hidden.erase(pit); } // Memory_policy is Tag_false ------------------------------------------------ template Point_iterator hidden_points_begin_internal(typename boost::disable_if_c::type* = nullptr) { return hidden_points_end(); } template Point_iterator hidden_points_end_internal(typename boost::disable_if_c::type* = nullptr) { return _hidden.end(); } // const versions template Point_const_iterator hidden_points_begin_internal(typename boost::disable_if_c::type* = nullptr) const { return hidden_points_end(); } template Point_const_iterator hidden_points_end_internal(typename boost::disable_if_c::type* = nullptr) const { return _hidden.end(); } template void hide_point_internal(const Point&, typename boost::disable_if_c::type* = nullptr) { } template void unhide_point_internal(const Point_iterator, typename boost::disable_if_c::type* = nullptr) { } template Point_3 weighted_circumcenter(const GT_& gt) const { return gt.construct_weighted_circumcenter_3_object()(this->vertex(0)->point(), this->vertex(1)->point(), this->vertex(2)->point(), this->vertex(3)->point()); } Point_3 weighted_circumcenter() const { return weighted_circumcenter(Geom_traits()); } private: Point_container _hidden; }; } //namespace CGAL #endif // CGAL_REGULAR_TRIANGULATION_CELL_BASE_3_H