// Copyright (c) 2006-2007 INRIA Sophia-Antipolis (France). // Copyright (c) 2008 GeometryFactory, Sophia Antipolis (France) // All rights reserved. // // This file is part of CGAL (www.cgal.org); you may redistribute it under // the terms of the Q Public License version 1.0. // See the file LICENSE.QPL distributed with CGAL. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ // // // Author(s) : Laurent Rineau, Stephane Tayeb #ifndef CGAL_MESH_CELL_BASE_3_H #define CGAL_MESH_CELL_BASE_3_H #include #include #include namespace CGAL { // Class Mesh_cell_base_3 // Cell base class used in 3D meshing process. // Adds information to Cb about the cell of the input complex containing it template< class GT, class MD, class Cb = CGAL::Regular_triangulation_cell_base_3< GT, CGAL::Triangulation_cell_base_with_circumcenter_3 > > class Mesh_cell_base_3 : public Mesh_3::Mesh_surface_cell_base_3 { // Base typedef Mesh_3::Mesh_surface_cell_base_3 Base; typedef typename GT::FT FT; public: // Index Type typedef typename MD::Subdomain_index Subdomain_index; typedef typename MD::Surface_index Surface_index; // typedef typename Base::Tds Tds; typedef typename Tds::Vertex_handle Vertex_handle; typedef typename Tds::Cell_handle Cell_handle; // To get correct cell type in TDS template < class TDS3 > struct Rebind_TDS { typedef typename Cb::template Rebind_TDS::Other Cb3; typedef Mesh_cell_base_3 Other; }; // Constructors Mesh_cell_base_3() : Base() , subdomain_index_() , sliver_value_(FT(0.)) , sliver_cache_validity_(false) { }; Mesh_cell_base_3 (Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3) : Base (v0, v1, v2, v3) , subdomain_index_() , sliver_value_(FT(0.)) , sliver_cache_validity_(false) { }; Mesh_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) : Base (v0, v1, v2, v3, n0, n1, n2, n3) , subdomain_index_() , sliver_value_(FT(0.)) , sliver_cache_validity_(false) { }; // Destructor virtual ~Mesh_cell_base_3() { }; // Default copy constructor and assignment operator are ok // Returns the index of the cell of the input complex that contains the cell Subdomain_index subdomain_index() const { return subdomain_index_; }; // Sets the index of the cell of the input complex that contains the cell void set_subdomain_index(const Subdomain_index& index) { subdomain_index_ = index; }; void set_sliver_value(const FT& value) { sliver_cache_validity_ = true; sliver_value_ = value; } const FT& sliver_value() const { return sliver_value_; } bool is_cache_valid() const { return sliver_cache_validity_; } void reset_cache_validity() const { sliver_cache_validity_ = false; } private: // The index of the cell of the input complex that contains me Subdomain_index subdomain_index_; FT sliver_value_; mutable bool sliver_cache_validity_; }; // end class Mesh_cell_base_3 template < class GT, class MT, class Cb > std::istream& operator>>(std::istream &is, Mesh_cell_base_3 &c) { return is >> static_cast(c); } template < class GT, class MT, class Cb > std::ostream& operator<<(std::ostream &os, const Mesh_cell_base_3 &c) { return os << c.subdomain_index() << static_cast(c); } } // end namespace CGAL #endif // CGAL_MESH_CELL_BASE_3_H